到那个具有内部链接的函数仅在一个翻译单元内可见

我读到那个

具有内部链接函数仅在一个翻译单元内可见。当编译器编译具有内部链接的函数时,编译器会在某个地址为该函数编写机器代码,并将该地址放入对该函数的所有调用中(都在一个翻译单元中),但删除所有提及“.o”文件中的函数。

我编译了这段代码

int g_i{};          //extern
static int sg_i{};    //static
static int add(int a, int b) //internal linakge!

图片[1]-到那个具有内部链接的函数仅在一个翻译单元内可见-唐朝资源网

{ return a+b; } int main() { static int s_i{}; //static - local int a_i{}; //auto - local a_i = add(1,2); return 0;

图片[2]-到那个具有内部链接的函数仅在一个翻译单元内可见-唐朝资源网

}

并使用g++ -c 编译并创建了我的main.o 文件然后尝试nm -C main.o 我得到这个结果:

0000000000000000 b .bss
0000000000000000 d .data

图片[3]-到那个具有内部链接的函数仅在一个翻译单元内可见-唐朝资源网

0000000000000000 p .pdata 0000000000000000 r .rdata$zzz 0000000000000000 t .text 0000000000000000 r .xdata U __main 0000000000000000 t add(int, int) 0000000000000004 b sg_i 0000000000000008 b main::s_i 0000000000000000 B g_i 0000000000000014 T main

你能解释一下为什么目标文件中仍然提到了这些内部标识符,而我听说使用这些目标文件的链接器不知道它们的存在吗?

谢谢。

© 版权声明
THE END
喜欢就支持一下吧
点赞39赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容