-
目录
模板类了解吗?实现一个unique_list容器(插入操作)(代码,借助vector实现的)(wyyx)
动态库,静态库区别(扩充知识点)
- 简单来说,动态库总是与应用程序编译在一起的,在任何情况下都能运行,不依赖外部的情况。而动态库是动态链接的,顾名思义就时在应用程序真正运行时才会链接。所以当用户的系统上没有该动态库时,应用程序就会运行失败(在Windows下就是缺少dll文件)。
- 多个程序可以共享一个动态库。当启动多个使用相同的动态库的应用程序时,只需要将动态库加载到内存一次就好了。相反,使用静态链接的应用程序一般都比较大,如果多个应用程序使用了相同的静态库,我们就需要将静态库多次装载到内存中,浪费内存。
- 静态链接应用程序一般执行速度较快,因为所需要的代码都放在可执行文件中了,而动态链接还需要在运行时动态调用动态库,因此速度略慢。
- 对于静态链接的应用程序,如果你的静态库发生了变化,那么整个程序都会需要重新编译,而动态链接的应用程序就没有这个问题,在保持接口不变的情况下,我们升级动态库不影响我们的应用程序,所以在这一点上动态库时格外的方便。
-
静态链接与动态链接的区别(wyyx)
- 静态链接用到的是静态库,动态链接用到的是动态库。
- 最明显的区别:动态链接初始化速度比静态链接初始化速度快,但运行期速度比静态链接的速度慢。
- 静态链接对函数库的连接是放在编译期完成的,所有相关的对象文件与涉及到的函数库被链接为一个可执行文件。程序运行期,与函数库再无瓜葛,因为我们所有需要的函数都已经在可执行文件之中了(这些函数库称为静态函数库)。
- 动态链接对函数库的链接并不是在编译期完成,而是在程序运行期真正到了调用动态库代码时,载入程序才计算(被调用的那部分)代码的逻辑地址,等到程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址。
- 多个程序可以共享一个动态库。当启动多个使用相同的动态库的应用程序时,只需要将动态库加载到内存一次就好了。相反,使用静态链接的应用程序一般都比较大,如果多个应用程序使用了相同的静态库,我们就需要将静态库多次装载到内存中,浪费内存。
- 对于静态链接的应用程序,如果你的静态库发生了变化,那么整个程序都会需要重新编译,而动态链接的应用程序就没有这个问题,在保持接口不变的情况下,我们升级动态库不影响我们的应用程序,所以在这一点上动态库时格外的方便。
-
解释内存对齐及其原理(wyyx)
内存对其的目的:主要是为了提高处理效率。
内存对齐规则:对于struct(或union)的数据成员吗,按照成员的声明顺序,依次安排内存,其偏移量为成员大小的整数倍,最后结构体的大小为最大成员(和pragma pack指定数值,两者最小的值)的整数倍。
内存对齐的原因:
- 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的。
- 性能原因:数据结构