程序员的自我修养
文章平均质量分 78
zhuziyu1157817544
Raura.
展开
-
《程序员的自我修养》-编译和链接
一个.c文件最终成为a.out文件需要经历预处理,编译,汇编,链接这4个过程。gcc总过程如下预编译解释 主要处理源代码文件里以#开始的预编译指令。eg.#include,#define 内容 1.展开所有的宏定义,#define 2.处理所有条件编译指令,#if, #,ifdef,#elif,#else,#endif 3.处理#include,通过递归过程原创 2017-01-08 17:42:27 · 1023 阅读 · 0 评论 -
《程序员的自我修养》--目标文件有什么和ELF文件格式简述
A.目标文件的格式目标文件定义源码经过编译之后但是没有经过链接的中间文件。理解:目标文件和可执行文件的结构相似,所以和可执行文件采用一种格式存储。可执行文件的格式,主要有PE(Portable Executable )和ELF(Executable Linkable Format)。目标文件和可执行文件可以看成一种类型的文件。同理,动态链接库和静态链接库也是按照可执行文件的格式存储的。以后这里主要说原创 2017-01-15 19:37:02 · 373 阅读 · 0 评论 -
《程序员的自我修养》--静态链接
空间分配例子:/*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 · 758 阅读 · 0 评论 -
《程序员自我修养》--动态链接
定义和基本思想动态链接英文是Dynamic Linking需要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互划分开来,形成独立的文件,而不再将他们静态的链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接这个过程推迟到了运行时再进行,这就是动态链接(Dynamic Linking)的基本思想补充理解普通可执行程序和动态链接库都包原创 2017-02-09 20:51:59 · 719 阅读 · 0 评论 -
《程序员的自我修养》--内存
内存布局一般有如下布局几个区: 栈:维护函数调用上下文,离开栈,函数调用没办法实现。 堆:容纳应用程序动态分配的内存区域。 可执行文件映像:可执行文件在内存里的映像。 保留区:队内存中受到保护,禁止访问的内存区域总称。 一个进程里典型的内存布局如下: 栈栈总是向下增长。栈顶由esp寄存器进行定位,压栈使得栈顶减小,出栈使得栈顶增加。单纯减小esp值等于在栈上开辟空间,单纯增加esp值等于原创 2017-02-12 18:52:28 · 323 阅读 · 0 评论 -
可执行文件装载和进程 笔记
装载的两种方法覆盖装入 : 利用程序的局部性原理,将一个程序中出现频率高的模块在程序运行时始终放入内存中,其他的模块,按照先后顺序,依次被覆盖。 如图例子: mian部分在程序运行时始终占用内存,加入main()函数调用A函数,A函数读入内存,等到A执行结束,main调用b时,B把A所用的所有空间全部覆盖。 A和B是两个竞争模块。 被调用的模块被称作调用它的模块的子模块。 任何一个原创 2017-01-25 16:36:02 · 737 阅读 · 0 评论