编译链接装载与库

44 阅读1分钟

1.程序和进程的区别

程序是一个二进制文件,里面包含代码段,bss段,data段 代码段(.text):存放程序机器码 bss段:未初始化的静态变量和全局变量,本质都是0,所以只是预留一个位置。 data段:已经初始化的全局变量和静态变量 其它段:很多,包含编译器版本,调试信息,动态链接信息,符号表等等。

2.链接的过程是怎么样的

多个.o文件,最终合并成一个二进制文件

1).相似段合并,.texth合并,bss合并,data合并 空间和地址分配 2).符号解析和重定位

3.静态链接和动态链接的区别

静态链接实在把所有数据合并到一个二进制 动态链接,是程序装载时候,从内存链接.so文件,复用.so

.so文件时编译时候,通过-shared的参数编译出来的动态库文件。

4.程序装载的过程是怎么样的

程序变成进程,最重要的概念,就是有了自己的虚拟进程空间。 读取可执行文件头,建立虚拟空间与可执行文件的映射关系。 进程不会把程序所有内容都加载到内存,这样内存可能不够。 linux系统的页管理,每次加载一个页,缺页才会去磁盘加载新的页,页面缓存遵循lRU算法。

5.进程的内存空间