小老弟研发之路面筋大汇总——关于C/C++(三)

本文详细介绍了C/C++中的动态库与静态库的区别,包括它们的使用场景和优缺点。接着探讨了内存对齐的原理和重要性,以及派生类虚表的布局。最后提到了模板类的概念,并通过一个unique_list容器的实现展示了模板的运用。
摘要由CSDN通过智能技术生成

 

  1. 简单来说,动态库总是与应用程序编译在一起的,在任何情况下都能运行,不依赖外部的情况。而动态库是动态链接的,顾名思义就时在应用程序真正运行时才会链接。所以当用户的系统上没有该动态库时,应用程序就会运行失败(在Windows下就是缺少dll文件)。
  2. 多个程序可以共享一个动态库。当启动多个使用相同的动态库的应用程序时,只需要将动态库加载到内存一次就好了。相反,使用静态链接的应用程序一般都比较大,如果多个应用程序使用了相同的静态库,我们就需要将静态库多次装载到内存中,浪费内存。
  3. 静态链接应用程序一般执行速度较快,因为所需要的代码都放在可执行文件中了,而动态链接还需要在运行时动态调用动态库,因此速度略慢。
  4. 对于静态链接的应用程序,如果你的静态库发生了变化,那么整个程序都会需要重新编译,而动态链接的应用程序就没有这个问题,在保持接口不变的情况下,我们升级动态库不影响我们的应用程序,所以在这一点上动态库时格外的方便。

  • 静态链接与动态链接的区别(wyyx)

  1. 静态链接用到的是静态库,动态链接用到的是动态库。
  2. 最明显的区别:动态链接初始化速度比静态链接初始化速度快,但运行期速度比静态链接的速度慢。
  3. 静态链接对函数库的连接是放在编译期完成的,所有相关的对象文件与涉及到的函数库被链接为一个可执行文件程序运行期,与函数库再无瓜葛,因为我们所有需要的函数都已经在可执行文件之中了(这些函数库称为静态函数库)。
  4. 动态链接对函数库的链接并不是在编译期完成,而是在程序运行期真正到了调用动态库代码时,载入程序才计算(被调用的那部分)代码的逻辑地址,等到程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址。
  5. 多个程序可以共享一个动态库。当启动多个使用相同的动态库的应用程序时,只需要将动态库加载到内存一次就好了。相反,使用静态链接的应用程序一般都比较大,如果多个应用程序使用了相同的静态库,我们就需要将静态库多次装载到内存中,浪费内存。
  6. 对于静态链接的应用程序,如果你的静态库发生了变化,那么整个程序都会需要重新编译,而动态链接的应用程序就没有这个问题,在保持接口不变的情况下,我们升级动态库不影响我们的应用程序,所以在这一点上动态库时格外的方便。

  • 解释内存对齐及其原理(wyyx)

内存对其的目的:主要是为了提高处理效率。

内存对齐规则:对于struct(或union)的数据成员吗,按照成员的声明顺序,依次安排内存,其偏移量为成员大小的整数倍,最后结构体的大小为最大成员(和pragma pack指定数值,两者最小的值)的整数倍。

内存对齐的原因:

  1. 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的。
  2. 性能原因:数据结构࿰
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值