C程序:关于编译的问题。。。(回答好的可继续加分)
我在百度文库中看到C语言编译过程详解:http://wenku.baidu.com/view/8976aeb765ce05087632130a.html其中讲到:编译后的...
我在百度文库中看到C语言编译过程详解:
http://wenku.baidu.com/view/8976aeb765ce05087632130a.html
其中讲到:编译后的目标文件OBJ由段组成。通常一个目标文件中至少有两个段:
1) 代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。
2) 数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。
那么我想问:
1.编译后的目标文件OBJ的结构是像汇编程序那样,由段组成的吗?(照文中的意思,编译后的OBJ是分段形式的,是由段组成的)。
2.编译后的obj文件有没有堆段、栈段????
还有:全局变量在编译完毕后,其在data area区的逻辑地址(段地址:偏移量)是固定不变的,从逻辑地址这个角度来说,全局变量的内存地址是不变的。 展开
http://wenku.baidu.com/view/8976aeb765ce05087632130a.html
其中讲到:编译后的目标文件OBJ由段组成。通常一个目标文件中至少有两个段:
1) 代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。
2) 数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。
那么我想问:
1.编译后的目标文件OBJ的结构是像汇编程序那样,由段组成的吗?(照文中的意思,编译后的OBJ是分段形式的,是由段组成的)。
2.编译后的obj文件有没有堆段、栈段????
还有:全局变量在编译完毕后,其在data area区的逻辑地址(段地址:偏移量)是固定不变的,从逻辑地址这个角度来说,全局变量的内存地址是不变的。 展开
展开全部
1、是,obj文件里面有段信息
2、没有,堆是运行的时候由运行库给你分配的(windows下vc运行库其实用的是系统提供的堆),栈式运行的时候系统给你分配的,编译后的obj里面甚至连栈段有多大这样的信息都没有(这是链接的时候加上去的)
全局变量的逻辑地址是不变的这说法在没开启动态基地址的时候是正确的,每次exe加载到内存中以后,同一个全局变量都在同一个位置。不过windows下开启动态基地址之后每次exe都可能被加载到不同的地址上,这个时候全局变量的内存地址就会变化了。
2、没有,堆是运行的时候由运行库给你分配的(windows下vc运行库其实用的是系统提供的堆),栈式运行的时候系统给你分配的,编译后的obj里面甚至连栈段有多大这样的信息都没有(这是链接的时候加上去的)
全局变量的逻辑地址是不变的这说法在没开启动态基地址的时候是正确的,每次exe加载到内存中以后,同一个全局变量都在同一个位置。不过windows下开启动态基地址之后每次exe都可能被加载到不同的地址上,这个时候全局变量的内存地址就会变化了。
展开全部
1 obj文件运行时,运行时分配给您(事实上,在windows下VC运行库系统堆)件信息
堆,堆高机运行时,系统分配给您的,里面竟然编译的OBJ堆栈段等信息都没有(这个链接,并去)
的全局变量是不变的,这种说法是不开放的动态的基地址是正确的,在未来每个exe文件加载到内存中的逻辑地址,一个全局变量,在相同的位置。但是,打开窗户,动态的基址,每次exe文件可能被装到不同的地址,这将改变全局变量的内存地址。
堆,堆高机运行时,系统分配给您的,里面竟然编译的OBJ堆栈段等信息都没有(这个链接,并去)
的全局变量是不变的,这种说法是不开放的动态的基地址是正确的,在未来每个exe文件加载到内存中的逻辑地址,一个全局变量,在相同的位置。但是,打开窗户,动态的基址,每次exe文件可能被装到不同的地址,这将改变全局变量的内存地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询