然后我刚才试了一下,发现程序刚进去的时候有初始值的全局变量就已经被初始化化了啊
初始化全局变量是操作系统的事吧?
26 个解决方案
#1
编译器
#2
你没吃错药吧?
#3
#4
lz吃错药了.
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
#5
还有,哥强烈BS你个骂人的
#6
哥以前很在乎别人对自己的评价,现在哥不在乎了
#7
个人觉得:全局变量初始化在那个阶段?要看怎么说了...
说在编译阶段应该也不错,包括局部变量不在编译阶段设定,程序加载后难道程序自己凭空创造?~~~
但若说到低层到具体的全局变量所包含的在程序中的地址和初值,那自然是在程序加载时和系统沟通后同意把个具体的地方给它放初值(没初始值的也把个地方设为空给变量用)...和局部变量的一个大差异就这.
个人看法,可供探讨,欢迎指点,但谢绝用非技术语言.
说在编译阶段应该也不错,包括局部变量不在编译阶段设定,程序加载后难道程序自己凭空创造?~~~
但若说到低层到具体的全局变量所包含的在程序中的地址和初值,那自然是在程序加载时和系统沟通后同意把个具体的地方给它放初值(没初始值的也把个地方设为空给变量用)...和局部变量的一个大差异就这.
个人看法,可供探讨,欢迎指点,但谢绝用非技术语言.
#8
4楼说得十分详细且严谨。我本想插几句的,发现插不上话了。
4楼是高手。
4楼是高手。
#9
文件里面的东西是变量么?
不是只有到了内存中才叫变量么?
不是只有到了内存中才叫变量么?
#10
还有,我也鄙视你这种管不好自己还管别人的人
#11
留个纪念,这是有关我第一次基本通过自己的能力将不利的情感完全化解的贴子
过程就是我我在这个贴子里面骂了别人一句,另一个人用比较粗鲁的方式告诉我我骂的不对,刚开始的时候没感觉到什么,今天突然感觉不对,当时的没感觉到什么可能只是类似受到重大肉体伤害时的麻木
然后到网上搜索了一些关于化解这种不利情感的东西,然后自己又想了想,想通了,由于具体过程无法用文字表达,所以我就不说了
第一次遇到的由于别人而产生的不利情感我花了几个月的时间才完全化解
这次只花了一两天就化解了,期待下一次能完全免疫
另外我跟你说一下,你这种指出别人错误的目标是好的,但是你的方法是错误的,因为你的方法很可能得不到正确的结果,当然,如果你的目标不是指出别人的错误,那么你的方法就是正确的
过程就是我我在这个贴子里面骂了别人一句,另一个人用比较粗鲁的方式告诉我我骂的不对,刚开始的时候没感觉到什么,今天突然感觉不对,当时的没感觉到什么可能只是类似受到重大肉体伤害时的麻木
然后到网上搜索了一些关于化解这种不利情感的东西,然后自己又想了想,想通了,由于具体过程无法用文字表达,所以我就不说了
第一次遇到的由于别人而产生的不利情感我花了几个月的时间才完全化解
这次只花了一两天就化解了,期待下一次能完全免疫
另外我跟你说一下,你这种指出别人错误的目标是好的,但是你的方法是错误的,因为你的方法很可能得不到正确的结果,当然,如果你的目标不是指出别人的错误,那么你的方法就是正确的
#12
操作系统不知道你的程序细节,只有编译器知道,那可不就是编译器做的么。非把编译器跟连接器拆着说没必要。
至于你的情感就放下吧,你觉得你心态好的话你可以看看3楼。先骂人的人永远都是没道理的。
至于你的情感就放下吧,你觉得你心态好的话你可以看看3楼。先骂人的人永远都是没道理的。
#13
谢谢,这次没完全免疫
不过几秒钟之后就完全没事了
#14
其实说到全局变量这种运行时的东西时。。。。。。。。。
实际说到谁初始化,应该说是 加载器,系统的 PE Loader,他把pe文件加载到内存,并正确的初始化各个节的内容
一般情况下,包括 bss 也好,data 也好,编译器只是在pe文件上做了个记号,加载器根据这个记号,初始化全局变量
只是大多数情况下,由于这个记号太过方便了,以至于加载器不用做什么特别的初始化工作,就已经达到了初始化的目的
实际说到谁初始化,应该说是 加载器,系统的 PE Loader,他把pe文件加载到内存,并正确的初始化各个节的内容
一般情况下,包括 bss 也好,data 也好,编译器只是在pe文件上做了个记号,加载器根据这个记号,初始化全局变量
只是大多数情况下,由于这个记号太过方便了,以至于加载器不用做什么特别的初始化工作,就已经达到了初始化的目的
#15
up 接分了
#16
4楼是高手
#17
貌似看过,现在忘了,好像罗云斌那本书上有
#18
这个搜索一下应该能知道答案。
#19
编译器把值写入PE可执行文件。操作系统载入时将该变量以文件中指定的值初始化
#20
看了整个帖子,感觉楼主应该给1楼道个歉。他可能说得简略让人难以一下明白,到楼主刻薄的言论让人心寒
#21
#22
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
很好,顶一下
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
很好,顶一下
#23
我是来围观楼主的
顺便接分
顺便接分
#24
厉害,顺便接分
#25
全局变量,或者局部变量怎么初始化,根据编译器的不同而不同。。。
#26
c语言中的全局变量,分为初始化的(int abc=100),和未初始化的(int abcd).
初始化的全局变量,在程序加载的时候,会从程序文件中,映射(大部分操作系统,只有第一次使用该地址空间时,才加载到内存中)到内存的数据段。未初始化的全局变量部分,映射到进程地址空间的数据段,Unix中,用到该数据的时候,自动0填充。
进程的运行过程如下。
1)地址映射,代码段,数据段等映射到逻辑地址空间
2)main才开始运行。
3)代码访问 “逻辑地址空间”中的内容,该地址空间尚未加载到物理内存时,加载之。
初始化的全局变量,在程序加载的时候,会从程序文件中,映射(大部分操作系统,只有第一次使用该地址空间时,才加载到内存中)到内存的数据段。未初始化的全局变量部分,映射到进程地址空间的数据段,Unix中,用到该数据的时候,自动0填充。
进程的运行过程如下。
1)地址映射,代码段,数据段等映射到逻辑地址空间
2)main才开始运行。
3)代码访问 “逻辑地址空间”中的内容,该地址空间尚未加载到物理内存时,加载之。
#1
编译器
#2
你没吃错药吧?
#3
#4
lz吃错药了.
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
#5
还有,哥强烈BS你个骂人的
#6
哥以前很在乎别人对自己的评价,现在哥不在乎了
#7
个人觉得:全局变量初始化在那个阶段?要看怎么说了...
说在编译阶段应该也不错,包括局部变量不在编译阶段设定,程序加载后难道程序自己凭空创造?~~~
但若说到低层到具体的全局变量所包含的在程序中的地址和初值,那自然是在程序加载时和系统沟通后同意把个具体的地方给它放初值(没初始值的也把个地方设为空给变量用)...和局部变量的一个大差异就这.
个人看法,可供探讨,欢迎指点,但谢绝用非技术语言.
说在编译阶段应该也不错,包括局部变量不在编译阶段设定,程序加载后难道程序自己凭空创造?~~~
但若说到低层到具体的全局变量所包含的在程序中的地址和初值,那自然是在程序加载时和系统沟通后同意把个具体的地方给它放初值(没初始值的也把个地方设为空给变量用)...和局部变量的一个大差异就这.
个人看法,可供探讨,欢迎指点,但谢绝用非技术语言.
#8
4楼说得十分详细且严谨。我本想插几句的,发现插不上话了。
4楼是高手。
4楼是高手。
#9
文件里面的东西是变量么?
不是只有到了内存中才叫变量么?
不是只有到了内存中才叫变量么?
#10
还有,我也鄙视你这种管不好自己还管别人的人
#11
留个纪念,这是有关我第一次基本通过自己的能力将不利的情感完全化解的贴子
过程就是我我在这个贴子里面骂了别人一句,另一个人用比较粗鲁的方式告诉我我骂的不对,刚开始的时候没感觉到什么,今天突然感觉不对,当时的没感觉到什么可能只是类似受到重大肉体伤害时的麻木
然后到网上搜索了一些关于化解这种不利情感的东西,然后自己又想了想,想通了,由于具体过程无法用文字表达,所以我就不说了
第一次遇到的由于别人而产生的不利情感我花了几个月的时间才完全化解
这次只花了一两天就化解了,期待下一次能完全免疫
另外我跟你说一下,你这种指出别人错误的目标是好的,但是你的方法是错误的,因为你的方法很可能得不到正确的结果,当然,如果你的目标不是指出别人的错误,那么你的方法就是正确的
过程就是我我在这个贴子里面骂了别人一句,另一个人用比较粗鲁的方式告诉我我骂的不对,刚开始的时候没感觉到什么,今天突然感觉不对,当时的没感觉到什么可能只是类似受到重大肉体伤害时的麻木
然后到网上搜索了一些关于化解这种不利情感的东西,然后自己又想了想,想通了,由于具体过程无法用文字表达,所以我就不说了
第一次遇到的由于别人而产生的不利情感我花了几个月的时间才完全化解
这次只花了一两天就化解了,期待下一次能完全免疫
另外我跟你说一下,你这种指出别人错误的目标是好的,但是你的方法是错误的,因为你的方法很可能得不到正确的结果,当然,如果你的目标不是指出别人的错误,那么你的方法就是正确的
#12
操作系统不知道你的程序细节,只有编译器知道,那可不就是编译器做的么。非把编译器跟连接器拆着说没必要。
至于你的情感就放下吧,你觉得你心态好的话你可以看看3楼。先骂人的人永远都是没道理的。
至于你的情感就放下吧,你觉得你心态好的话你可以看看3楼。先骂人的人永远都是没道理的。
#13
谢谢,这次没完全免疫
不过几秒钟之后就完全没事了
#14
其实说到全局变量这种运行时的东西时。。。。。。。。。
实际说到谁初始化,应该说是 加载器,系统的 PE Loader,他把pe文件加载到内存,并正确的初始化各个节的内容
一般情况下,包括 bss 也好,data 也好,编译器只是在pe文件上做了个记号,加载器根据这个记号,初始化全局变量
只是大多数情况下,由于这个记号太过方便了,以至于加载器不用做什么特别的初始化工作,就已经达到了初始化的目的
实际说到谁初始化,应该说是 加载器,系统的 PE Loader,他把pe文件加载到内存,并正确的初始化各个节的内容
一般情况下,包括 bss 也好,data 也好,编译器只是在pe文件上做了个记号,加载器根据这个记号,初始化全局变量
只是大多数情况下,由于这个记号太过方便了,以至于加载器不用做什么特别的初始化工作,就已经达到了初始化的目的
#15
up 接分了
#16
4楼是高手
#17
貌似看过,现在忘了,好像罗云斌那本书上有
#18
这个搜索一下应该能知道答案。
#19
编译器把值写入PE可执行文件。操作系统载入时将该变量以文件中指定的值初始化
#20
看了整个帖子,感觉楼主应该给1楼道个歉。他可能说得简略让人难以一下明白,到楼主刻薄的言论让人心寒
#21
#22
全局变量,有未初始化和初始化了的.
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
很好,顶一下
而初始化了的,是在编译的时候值就由 编译器 直接写到pe文件中的(windows下gcc是写到 .data section中)
未初始化的在gcc编译器中会分配一个 .bss section 不占物理空间.在pe加载器加载执行的时候会根据pe header的一些信息分配空间给.bss.
初始化当然就是pe加载器搞的了.如果分配一块全0的空间,那么初始值就为0了.
很好,顶一下
#23
我是来围观楼主的
顺便接分
顺便接分
#24
厉害,顺便接分
#25
全局变量,或者局部变量怎么初始化,根据编译器的不同而不同。。。
#26
c语言中的全局变量,分为初始化的(int abc=100),和未初始化的(int abcd).
初始化的全局变量,在程序加载的时候,会从程序文件中,映射(大部分操作系统,只有第一次使用该地址空间时,才加载到内存中)到内存的数据段。未初始化的全局变量部分,映射到进程地址空间的数据段,Unix中,用到该数据的时候,自动0填充。
进程的运行过程如下。
1)地址映射,代码段,数据段等映射到逻辑地址空间
2)main才开始运行。
3)代码访问 “逻辑地址空间”中的内容,该地址空间尚未加载到物理内存时,加载之。
初始化的全局变量,在程序加载的时候,会从程序文件中,映射(大部分操作系统,只有第一次使用该地址空间时,才加载到内存中)到内存的数据段。未初始化的全局变量部分,映射到进程地址空间的数据段,Unix中,用到该数据的时候,自动0填充。
进程的运行过程如下。
1)地址映射,代码段,数据段等映射到逻辑地址空间
2)main才开始运行。
3)代码访问 “逻辑地址空间”中的内容,该地址空间尚未加载到物理内存时,加载之。