链接装载与库_读书笔记(二)

本文详细解析了静态链接过程中VMA与LMA的概念,并解释了为什么静态运行库中的目标文件只包含单一函数,如libc.a中的printf.o仅包含printf()函数,以优化内存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章  静态链接

     链接  $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文件的函数都调用进去,增大了内存空间。因此一个目标函数只包含一个函数,然后调用哪个函数就链接哪个函数的目标文件,这样最大的减少了文件的内存空间。

 

  主要摘录的是书籍中和我工作比较相关的内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值