全局变量初始化问题

时间:2022-01-21 21:41:14
以下代码:

int aaa=0;
int bbb=10;
void Main()

  ...............
}

aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化?

18 个解决方案

#1


跟这段话一样:aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化,全局变量一般分配在栈区。

#2


全局变量 会在执行main函数之前进行初使化

#3


全局变量和静态变量分配在静态存储区,生命周期直到程序结束退出!

#4


aaa初始化之后

#5


bbb和aaa都在全局数据区,在main函数开始前初始化。bbb在aaa后初始化。

#6


是的,在main前初始化。例如定义全局对象,那么它的构造函数将比main先得到执行

#7


引用 5 楼 cattycat 的回复:
bbb和aaa都在全局数据区,在main函数开始前初始化。bbb在aaa后初始化。


学习了~~~~~~~~~

#8


据我所知,C/C++内存区域有:代码区、堆区、栈区、全局/静态变量区、常量区。
没听说过ZI区域,什么是ZI区域?

#9


引用 1 楼 djjlove_2008 的回复:
跟这段话一样:aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化,全局变量一般分配在栈区。


全局变量怎么可能在栈区,c的内存管理策略主要分为三种,静态区,动态区。静态区存储的主要是全局变量,静态变量(static关键字修饰的变量),动态区分为两种栈,堆。临时变量一般在栈中,而堆存储的一般是通过malloc动态申请的空间。栈的空间由系统管理,但是堆的空间是由我们自己管理的,否则会内存泄漏。

#10


楼上很对

#11


这话问的
aaa初始化时候就初始化bbb楼喽

#12


顶楼上  

#13


全局变量反汇编出来是DB DW等声明的

#14


如果是win,想知道真实的情况问盖茨要win程序的初始化代码。
如果不是其他开源的OS,看启动代码或者初始化代码不就清楚了?

#15


现在的编译器都不一定放在那里的,找老谭这类老书的解释是全局变量和静态变量分配在静态存储区,生命周期直到程序结束退出!但现在的编译器都不一定的,还是研究汇编代码

#16


aaa, bbb 是全局变量,分配在静态存储区, 在编译时初始化.

#17


引用楼主 digifan 的回复:
以下代码:

int aaa=0;
int bbb=10;
void Main()

  ...............
}

aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化?


bbb和aaa一样

#18


VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
不要迷信书、考题、老师;
要迷信CPU、编译器、调试器。

#1


跟这段话一样:aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化,全局变量一般分配在栈区。

#2


全局变量 会在执行main函数之前进行初使化

#3


全局变量和静态变量分配在静态存储区,生命周期直到程序结束退出!

#4


aaa初始化之后

#5


bbb和aaa都在全局数据区,在main函数开始前初始化。bbb在aaa后初始化。

#6


是的,在main前初始化。例如定义全局对象,那么它的构造函数将比main先得到执行

#7


引用 5 楼 cattycat 的回复:
bbb和aaa都在全局数据区,在main函数开始前初始化。bbb在aaa后初始化。


学习了~~~~~~~~~

#8


据我所知,C/C++内存区域有:代码区、堆区、栈区、全局/静态变量区、常量区。
没听说过ZI区域,什么是ZI区域?

#9


引用 1 楼 djjlove_2008 的回复:
跟这段话一样:aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化,全局变量一般分配在栈区。


全局变量怎么可能在栈区,c的内存管理策略主要分为三种,静态区,动态区。静态区存储的主要是全局变量,静态变量(static关键字修饰的变量),动态区分为两种栈,堆。临时变量一般在栈中,而堆存储的一般是通过malloc动态申请的空间。栈的空间由系统管理,但是堆的空间是由我们自己管理的,否则会内存泄漏。

#10


楼上很对

#11


这话问的
aaa初始化时候就初始化bbb楼喽

#12


顶楼上  

#13


全局变量反汇编出来是DB DW等声明的

#14


如果是win,想知道真实的情况问盖茨要win程序的初始化代码。
如果不是其他开源的OS,看启动代码或者初始化代码不就清楚了?

#15


现在的编译器都不一定放在那里的,找老谭这类老书的解释是全局变量和静态变量分配在静态存储区,生命周期直到程序结束退出!但现在的编译器都不一定的,还是研究汇编代码

#16


aaa, bbb 是全局变量,分配在静态存储区, 在编译时初始化.

#17


引用楼主 digifan 的回复:
以下代码:

int aaa=0;
int bbb=10;
void Main()

  ...............
}

aaa会分配到ZI区中,连接器会输出ZI区域的起始地址和大小,系统启动时初始化
bbb什么时候初始化?


bbb和aaa一样

#18


VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
不要迷信书、考题、老师;
要迷信CPU、编译器、调试器。