请问编译器是如何初始化全局变量的

时间:2021-05-13 19:37:37
请问有人愿意给我讲讲吗?就是程序启动以后具体是如何初始化全局变量的,比如是如何调用某个类对象的构造函数。
我大概看了看CRT0.C的代码,有很多看不明白。

18 个解决方案

#1


。。。。。。。。。。。。。深层次的问题?up

#2


http://blog.chinaunix.net/article.php?articleId=8814&blogId=768

#3


学习

#4




请看 喉结 的深入抢出   mfc 的 c++ 基础知识



http://community.csdn.net/Expert/topic/4064/4064676.xml?temp=.4853022

大家看看这个问题,有价值一下啊

#5


C++中的global object都配置在程序的data segment中,如果没有明确的初始化,将以0为内存中的初值。这个过程是在编译期实现的。
如果global object配有constructor的话,那么这个constructor要到程序的startup阶段才会执行。这个过程叫静态初始化。
C++对于在何时初始化global object没有明确规定,但是保证在main函数执行之前完成初始化,在main结束之前完成清除。一般的编译器都是在main的开始处插入所谓的startup阶段进行初始化,在结束时插入exit阶段来进行清除操作。

#6


全军变量存放在全局数据区,在main函数前初始化

#7


学习!

#8


编译器是如何初始化全局变量的 
=================
如果初始化数据是常数,那就在链接时候完成,链接器将初始化好的全局数据放在可执行文件的数据段,程序装载后,全局变量就初始化完毕。

如果不是常数,那就在进入main函数前执行初始化操作。

#9


我觉得是和编译器实现有关

#10


up一次

我知道是在main之前完成的,加个断点就知道了,我是想知道这一点是如何做到的

#11


另外,对C程序,startup code 就在CRT0.C中,四个函数对应着四种程序模式。
我不知道C++程序是不是也用的这个。

我就是看不大懂,所以才想请达人给讲讲。如果只是知道是在startup code 里干的,就不用回复了。

#12


关注!!!!

#13


编译器在定义全局变量的时候就立刻给变量初始化,并赋值为0

#14


看样子是没戏了,最后up一次

#15


楼主想知道的是全局变量是怎样初始化的,而不是在何时初始化。
不过这个问题,我也不清楚,最近在研究编译原理,打算自己定义一个语言,做个小编译器,实现一下,应该能明白很多。到时再来这里。

#16


帮你up

#17


ding

#18


mark!!

#1


。。。。。。。。。。。。。深层次的问题?up

#2


http://blog.chinaunix.net/article.php?articleId=8814&blogId=768

#3


学习

#4




请看 喉结 的深入抢出   mfc 的 c++ 基础知识



http://community.csdn.net/Expert/topic/4064/4064676.xml?temp=.4853022

大家看看这个问题,有价值一下啊

#5


C++中的global object都配置在程序的data segment中,如果没有明确的初始化,将以0为内存中的初值。这个过程是在编译期实现的。
如果global object配有constructor的话,那么这个constructor要到程序的startup阶段才会执行。这个过程叫静态初始化。
C++对于在何时初始化global object没有明确规定,但是保证在main函数执行之前完成初始化,在main结束之前完成清除。一般的编译器都是在main的开始处插入所谓的startup阶段进行初始化,在结束时插入exit阶段来进行清除操作。

#6


全军变量存放在全局数据区,在main函数前初始化

#7


学习!

#8


编译器是如何初始化全局变量的 
=================
如果初始化数据是常数,那就在链接时候完成,链接器将初始化好的全局数据放在可执行文件的数据段,程序装载后,全局变量就初始化完毕。

如果不是常数,那就在进入main函数前执行初始化操作。

#9


我觉得是和编译器实现有关

#10


up一次

我知道是在main之前完成的,加个断点就知道了,我是想知道这一点是如何做到的

#11


另外,对C程序,startup code 就在CRT0.C中,四个函数对应着四种程序模式。
我不知道C++程序是不是也用的这个。

我就是看不大懂,所以才想请达人给讲讲。如果只是知道是在startup code 里干的,就不用回复了。

#12


关注!!!!

#13


编译器在定义全局变量的时候就立刻给变量初始化,并赋值为0

#14


看样子是没戏了,最后up一次

#15


楼主想知道的是全局变量是怎样初始化的,而不是在何时初始化。
不过这个问题,我也不清楚,最近在研究编译原理,打算自己定义一个语言,做个小编译器,实现一下,应该能明白很多。到时再来这里。

#16


帮你up

#17


ding

#18


mark!!