《程序员自我修养》阅读笔记
来源:互联网 发布:windows重启网络命令 编辑:程序博客网 时间:2024/06/05 13:32
1,gcc hello.c所包含的过程:
预处理,编译,汇编,链接。
其中预处理主要是对程序代码进行展开,精简。
编译把预处理之后的文件进行一系列的词法分析,语法分析,语义分析,中间代码生成,以及目标代码生成和优化产生汇编代码。
汇编把汇编代码转成机器代码。
链接:将代码的不同部分进行组装,主要包括:地址和空间分配,符号绑定,重定位。
对于编译之后生成的目标文件里面主要包含以下几段:
代码段,(.code):存放机器代码。
数据段,(.data):存放已经初始化的全局变量和局部静态变量。
bss段,(.bss):存放未初始化的全局变量和局部静态变量。
2,程序的执行:
每一个函数在执行main函数之前,会首先执行.init段,执行main函数之后在退出前会执行.fini段,c++代码的构造和析构函数就是依据这一原理,将相应函数置于其中,进行的。
3,静态、动态链接库
静态链接方法:#pragmacomment(lib, "test.lib"),静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来
静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库
动态链接方法:LoadLibrary()/GetProcessAddress()和FreeLibrary(),使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序。
具体细节可以参看链接:
http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html
- 《程序员自我修养》阅读笔记
- 阅读笔记-------------程序员的自我修养
- 程序员的自我修养阅读笔记(1)
- <程序员的自我修养-链接,装载与库> 阅读笔记
- 《程序员的自我修养》阅读笔记 --编译和链接
- 《程序员的自我修养--链接、装载与库》第一章阅读笔记
- 《程序员的自我修养》笔记--静态链接
- “程序员自我修养”学习笔记---编译链接
- 程序员自我修养链接库笔记
- 程序员的自我修养——笔记
- 程序员的自我修养-笔记一
- 程序员的自我修养笔记第一章
- 程序员的自我修养笔记第二章
- 程序员的自我修养第三章笔记
- 《程序员的自我修养》笔记(1)
- 程序员的自我修养笔记一
- 程序员的自我修养笔记二
- 程序员的自我修养笔记三
- HLG 1905 f(N) 矩阵快速幂
- Linq使用Group By 1
- GDAL 的java调用问题总结
- 我的购物”页面本身仍然可以访问
- 知乎商业化道路改怎么走?
- 《程序员自我修养》阅读笔记
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- struts2的默认值
- 芋香源甜品加盟骗子
- java 接口与抽象类
- Linq使用Group By 2
- play工程提供接口,spring工程调这个接口去Jason数据的实现
- ExtJs 4.x 学习小记:Ext.TabPanel动态隐藏及显示
- Linq使用Group By 3