22/8/4 深入理解计算机系统 学习

链接器使分离编译成为可能。

作用域规则的实现

.i文件ASCII码

main.c ->main.i ->main.s->main.o和函数的.o文件一起链接生成可执行文件

然后终端启动程序,调用加载器,把可执行文件的代码和数据复制到内存,然后将控制转移到程序的开头。

 

注意:.data保存已经初始化的全局和静态C变量,局部C变量在运行时保存在栈中。

.symtab:符号表,不包含局部变量。

.strtab:字符串表,符号表和节的名字的表,结构是以null结尾的字符串的序列。(我记得只有一个串,使用用长度和起始位置)

 

符号表包含三种符号:

1、 自己定义的全局符号

2、 被自己引用的其他模块定义的全局符号

3、 只被模块自己定义和引用的局部符号,对应于带static属性的C函数和全局变量。

 

带 static属性的本地过程变量是不在栈中管理的,由编译器在.data和.bss中为每个定义分配空间,在符号表中创建有唯一名字的本地链接器符号。

重整:编译器把每个唯一的方法和参数列表组合编码成一个对链接器来说唯一的名字。(C++,JAVA 重载会使用)

posted @ 2022-08-04 21:33  227569hy  阅读(36)  评论(0)    收藏  举报