- 博客(4)
- 资源 (2)
- 收藏
- 关注
原创 可执行文件装载和进程 笔记
装载的两种方法覆盖装入 : 利用程序的局部性原理,将一个程序中出现频率高的模块在程序运行时始终放入内存中,其他的模块,按照先后顺序,依次被覆盖。 如图例子: mian部分在程序运行时始终占用内存,加入main()函数调用A函数,A函数读入内存,等到A执行结束,main调用b时,B把A所用的所有空间全部覆盖。 A和B是两个竞争模块。 被调用的模块被称作调用它的模块的子模块。 任何一个
2017-01-25 16:36:02 746
原创 《程序员的自我修养》--静态链接
空间分配例子:/*a.c*/ extern int shared; int main() { int a = 100; swap(&a,&shared); return 0; } /*b.c*/ int shared = 1; void swap(int *a,int *b) { int temp; temp = (*a); (*a) = (*b);
2017-01-17 14:20:04 772
原创 《程序员的自我修养》--目标文件有什么和ELF文件格式简述
A.目标文件的格式目标文件定义源码经过编译之后但是没有经过链接的中间文件。理解:目标文件和可执行文件的结构相似,所以和可执行文件采用一种格式存储。可执行文件的格式,主要有PE(Portable Executable )和ELF(Executable Linkable Format)。目标文件和可执行文件可以看成一种类型的文件。同理,动态链接库和静态链接库也是按照可执行文件的格式存储的。以后这里主要说
2017-01-15 19:37:02 389
原创 《程序员的自我修养》-编译和链接
一个.c文件最终成为a.out文件需要经历预处理,编译,汇编,链接这4个过程。gcc总过程如下预编译解释 主要处理源代码文件里以#开始的预编译指令。eg.#include,#define 内容 1.展开所有的宏定义,#define 2.处理所有条件编译指令,#if, #,ifdef,#elif,#else,#endif 3.处理#include,通过递归过程
2017-01-08 17:42:27 1039
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人