链接装载与库_读书笔记(二)
2016-04-25 16:14
274 查看
第四章 静态链接
链接 $ld
VMA ( vitual memory address )
LMA ( load memory address )
COMMON 多个弱类型或者弱引用,在链接时划分内存我们以最大内存为准。
API application programing interface 源代码层面的接口
ABI application binary interface 二进制代码层面的接口
两种c++ ABI 标准 window visual c++ he gnu 的gcc 标准,两种互不兼容。
为什么静态运行库里面一个一个目标文件只包含一个函数,比如libc.a 里面printf.o 只有printf() 函数, 而strlen.o 里面只有 .strlen() 函数?
因为 连接器链接动态库是以.o文件也就是目标文件(object file) 为单位的。如果一个目标文件中放了多个函数,比如printf.o里面还有很多其他函数,我们在调用printf()时,会把所有同一个.o文件的函数都调用进去,增大了内存空间。因此一个目标函数只包含一个函数,然后调用哪个函数就链接哪个函数的目标文件,这样最大的减少了文件的内存空间。
主要摘录的是书籍中和我工作比较相关的内容。
链接 $ld
VMA ( vitual memory address )
LMA ( load memory address )
COMMON 多个弱类型或者弱引用,在链接时划分内存我们以最大内存为准。
API application programing interface 源代码层面的接口
ABI application binary interface 二进制代码层面的接口
两种c++ ABI 标准 window visual c++ he gnu 的gcc 标准,两种互不兼容。
为什么静态运行库里面一个一个目标文件只包含一个函数,比如libc.a 里面printf.o 只有printf() 函数, 而strlen.o 里面只有 .strlen() 函数?
因为 连接器链接动态库是以.o文件也就是目标文件(object file) 为单位的。如果一个目标文件中放了多个函数,比如printf.o里面还有很多其他函数,我们在调用printf()时,会把所有同一个.o文件的函数都调用进去,增大了内存空间。因此一个目标函数只包含一个函数,然后调用哪个函数就链接哪个函数的目标文件,这样最大的减少了文件的内存空间。
主要摘录的是书籍中和我工作比较相关的内容。
相关文章推荐
- 关于状态码
- Html5
- 常用排序C实现
- HttpClient和HttpURLConnection哪个更好
- 将VIM改造成c++IDE
- Android开发框架
- java--WebService小例子【MyEclipse10】
- 常见的分布式文件系统简介
- iOS代码对齐 ---XAlign
- 接口返回的死数据
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
- 处理视频帧
- tomcat(9)Session管理
- 关于Tomcat服务器的一些注意问题
- Linux下部署FTP服务器
- django migrate error: table 'xxx' already exists
- linux-c++调用shell
- Ajax跨域问题的解决方法之一 —— "Access-Control-Allow-Origin"
- 错排问题
- B. Little Artem and Grasshopper