编译原理(5):链接
在编译阶段,编译器并不能直接知道函数的绝对内存地址(因为最终地址由链接器在链接时分配),但它可以确定函数的相对地址或符号引用,并通过以下步骤实现“硬编码”函数调用:
1. 编译阶段:生成符号引用
当编译器处理 calc.add(2, 3) 时:
-  解析函数定义: -  编译器在编译 Calculator::add时,会为其生成一个符号名(如_ZN9Calculator3addEii,这是经过名称修饰(Name Mangling)后的唯一标识)。
-  符号名包含了类名、函数名和参数类型信息,确保全局唯一性。 
 
-  
-  生成调用指令: -  编译器将 calc.add(2, 3)转换为汇编指令call _ZN9Calculator3addEii。
-  这里的 _ZN9Calculator3addEii是一个符号引用,表示“需要调用该符号对应的函数”。
 ; x86-64 汇编示例 lea rdi, [rbp-16] ; 传递 this 指针(calc 的地址) mov esi, 2 ; 参数 a = 2
-  
