由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于C/C++里的Static variable的memory allocation/initializa
相关主题
What're the three types of memory allocated for C++ variables?static initialization dependency c++
一个 default constructor 的问题为啥 const Base cb 要求Base() {} 而 const vBase vb 不呢?
C++一个string的小问题a small question about c++ memory allocation
C++ Interview Questionc++ 不自动initialize变量么?
question about structure initializationa and reference问一个C++ set和unordered_set iterator的问题
What does the default constructor do?Is the order of initialization a, b, c or c, b, a?
static variable存在heap还是stack?c++ initialize struct
C++弱问问个copy constructor的问题
相关话题的讨论汇总
话题: static话题: allocation话题: memory话题: c++话题: initializa
进入Programming版参与讨论
1 (共1页)
c******g
发帖数: 63
1
两种情况,一个是global static,一个是local static。
有一点应该没啥疑问,就是这两种static variable的memory allocation是before the
program starts的(我的理解是进入main()函数之前)。但是经常有参考资料中看到
说是“at the compile time”--这就不太懂了,我把一个.cpp文件compile一下就把
memory给allocate了?这明显不可能嘛。
第二个问题是:它们到底是啥时候initialize的?我觉得global的static肯定是在到了
declare这个变量的那一句时initialize的,是在进入main()函数前。
那local的呢(在一个function里的)?究竟是在整个程序start之前initialize,还是
第一次访问那个函数,进入函数后到了declare这个变量的那一句时才initialize?
请诸位大虾给予详细批评指正!多谢!
t****t
发帖数: 6806
2

the
it's most likely allocated on .bss (uninitialized)/.data (initialized)
section, which is indeed "allocated" before runtime, since it's not dynamic
allocation anyway. Link editor will "know" the address of each, but before
execution starts, dynamic loader will "allocate" all the memory required for
.bss, most likely in one go.
for non-POD (non-trivial ctor), the ctor is executed before main(). The
order in one compilation unit is always up-to-down, but order across
multiple compilation units is indeterminate.
At first execution of function.

【在 c******g 的大作中提到】
: 两种情况,一个是global static,一个是local static。
: 有一点应该没啥疑问,就是这两种static variable的memory allocation是before the
: program starts的(我的理解是进入main()函数之前)。但是经常有参考资料中看到
: 说是“at the compile time”--这就不太懂了,我把一个.cpp文件compile一下就把
: memory给allocate了?这明显不可能嘛。
: 第二个问题是:它们到底是啥时候initialize的?我觉得global的static肯定是在到了
: declare这个变量的那一句时initialize的,是在进入main()函数前。
: 那local的呢(在一个function里的)?究竟是在整个程序start之前initialize,还是
: 第一次访问那个函数,进入函数后到了declare这个变量的那一句时才initialize?
: 请诸位大虾给予详细批评指正!多谢!

D*******a
发帖数: 3688
3
编译生成binary的时候,把static variable的内容直接写进文件。操作系统运行的时
候,先把文件读入内存,这就等于分配了空间。

the

【在 c******g 的大作中提到】
: 两种情况,一个是global static,一个是local static。
: 有一点应该没啥疑问,就是这两种static variable的memory allocation是before the
: program starts的(我的理解是进入main()函数之前)。但是经常有参考资料中看到
: 说是“at the compile time”--这就不太懂了,我把一个.cpp文件compile一下就把
: memory给allocate了?这明显不可能嘛。
: 第二个问题是:它们到底是啥时候initialize的?我觉得global的static肯定是在到了
: declare这个变量的那一句时initialize的,是在进入main()函数前。
: 那local的呢(在一个function里的)?究竟是在整个程序start之前initialize,还是
: 第一次访问那个函数,进入函数后到了declare这个变量的那一句时才initialize?
: 请诸位大虾给予详细批评指正!多谢!

F********g
发帖数: 475
4
If it's not explicitly initialized(static int temp;), stored in .bss.
If it is(static int temp=0x10;) ,stored in .data
p*********t
发帖数: 2690
5
翻教科书.

the

【在 c******g 的大作中提到】
: 两种情况,一个是global static,一个是local static。
: 有一点应该没啥疑问,就是这两种static variable的memory allocation是before the
: program starts的(我的理解是进入main()函数之前)。但是经常有参考资料中看到
: 说是“at the compile time”--这就不太懂了,我把一个.cpp文件compile一下就把
: memory给allocate了?这明显不可能嘛。
: 第二个问题是:它们到底是啥时候initialize的?我觉得global的static肯定是在到了
: declare这个变量的那一句时initialize的,是在进入main()函数前。
: 那local的呢(在一个function里的)?究竟是在整个程序start之前initialize,还是
: 第一次访问那个函数,进入函数后到了declare这个变量的那一句时才initialize?
: 请诸位大虾给予详细批评指正!多谢!

1 (共1页)
进入Programming版参与讨论
相关主题
问个copy constructor的问题question about structure initializationa and reference
再问C++初始化问题。What does the default constructor do?
static vector 怎么 initialize ?static variable存在heap还是stack?
C++: Static initialization dependencyC++弱问
What're the three types of memory allocated for C++ variables?static initialization dependency c++
一个 default constructor 的问题为啥 const Base cb 要求Base() {} 而 const vBase vb 不呢?
C++一个string的小问题a small question about c++ memory allocation
C++ Interview Questionc++ 不自动initialize变量么?
相关话题的讨论汇总
话题: static话题: allocation话题: memory话题: c++话题: initializa