目标文件的格式:可执行文件格式(Executable)
【1】现在PC平台主流的可执行文件格式(Executable),主要是Windows下的PE,Linux下的ELF。
【2】目标文件就是:linux下编译后未进行连接后的.o文件。他和可执行文件内容和格式很相似,,所以一般采用相同的格式存储。
【3】动态链接库:Windows下的.dll,Linux下的.so
静态链接库:Windows下的.lib,Linux下的.a
查看方式:fille hello.o
目标文件中包含有:机器指令代码,数据。(先统称为“段”)
程序源代码编译后的机器指令放在:代码段(.code和.text)
已初始化的全局变量和局部静态变量都保存在.data中。
未初始化的全局变量和局部静态变量都保存在.bss中。【.bss段只是为未初始化的全局变量和局部静态变量预留位置,在文件中不占据位置】
先前说了分为指令代码和数据,问题来了,他们是分开存放的,为什么?
(1)数据区域对于进程来说是可读写的,对于指令区域是只读的,防止指令程序被有意无意的被改写。两个区域的内容被映射到不同的虚存空间,各种权限也不同。
(2)现代CPU,有着极大的缓存,程序为了提高缓存的命中率,分开有利于减少范围。
(3)基于现代多线程的广泛使用,比如某软件共享一组图片或信息,或者说共享指令(例IE浏览器,共享基本指令,私有数据)。