编译的过程
预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)
编译, 检查语法,生成汇编 ( test.s main .s)
汇编, 汇编代码转换机器码 (test.o main.o)
链接 链接到一起生成可执行程序 a.out
链接是怎么链接的
链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。
静态链接和动态链接的区别
静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时
静态链接可能会造成内存浪费,因为内存中可能会有多个相同的程序副本。
动态连接则不会有内存浪费,而且升级dll方便,直接替换就可以了。
确定是如果运行时动态连接的dll丢失则会报错,而且进行动态链接的时候性能也会略有损失
思考
如果动态链接的代码里面有个静态变量被A修改了 B的链接里面这个变量会变吗?
很明显不会,从反正法可以轻易得出结论。如果这个结论成立的话,那么系统必然会出问题,因为肯定系统中肯定有这种情况,但是实际上操作系统并无事发生
不过真正的原因是因为:动态链接里,只有代码段是共享的,数据段是不共享的