本为主要解决三个问题:什么是目标文件?目标文件的格式是怎样的?为什么要设计成这样的格式?
什么是目标文件?
目标文件就是源代码编译后但是并未进行链接的文件,比如windows下面的 .obj 和Linux下面的 .o 等。
目标文件的格式?
目标文件一般分成两种,windows下面的PE(Portable Executable)和Linux下面的 ELF(Executable Linkable Format)
目标文件的组成结构图:BSS(Block Started by Symbol)
那么为什么要把程序指令和程序数据分开存放呢?
1. 数据区域对于进程来说是可读可写的,对于指令区域只可读,这样可防止程序指令被修改
2. 程序区和指令区分离有利于提高程序的局部性,提高CPU的缓存命中率
3. 当系统中运行多个改程序副本时,他们的指令都一样,这样的分离有利于共享指令,节省内存