看这个例子。
#include "stdio.h"
int global_var=5;
int main ()
{
int local_var=6;
//some statements
return 0;
}
如果main函数是唯一的入口点,那么global_var
的声明和赋值在什么时候发生?
在一个相关的注意事项上,global_var
是分配在堆中还是堆栈中?此外,是否有一种方法来声明一个全局变量从一个函数,而尊重入口点?
概念上,全局变量的初始化发生在 main
输入之前。在这里,我假设所有代码都在一个翻译单元中编译:更正式地说,在遇到定义该全局变量的翻译单元中定义的任何函数之前,立即初始化全局变量。(尽管编译器可以优化这个,如果没有副作用的话)。
C和c++在它们的标准中都没有提到堆或堆栈:它们是实现概念,而不是语言概念。
所以global_var
可以被分配到堆上,但是它可能是在main
进入之前建立的某种堆栈上。
不能在函数中声明全局变量。函数中的static
变量可以模仿全局变量的许多行为,但从概念上讲,static
是在函数第一次遇到时初始化的。
全局变量在进入main
之前进行初始化。
不不能在任何函数中声明全局变量。如果在函数内声明任何变量,那么该变量的作用域将仅限于该函数。代替全局变量,您可以尝试通过使用static
变量来实现您的目标。
全局变量既不存储在堆栈中,也不存储在堆中。每个程序(可执行代码)通常分为四个部分。
Code
Data
Stack
Heap
全局变量和常量/字面值一起存储在Data节中。源:变量存储在内存的哪里?
p。S: static
变量只能初始化一次