首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接性能是否影响到在.obj文件中标记为本地还是全局的符号?

链接性能是否影响到在.obj文件中标记为本地还是全局的符号?
EN

Stack Overflow用户
提问于 2022-09-21 07:31:57
回答 1查看 25关注 0票数 1

我正在设法减少我的程序的链接时间。

我注意到,我的代码库中有许多函数没有被指定为static,因此它们被视为extern

如果我将它们指定为static,它们将得到内部链接。我可以通过在对象文件(linux中的nm)上运行name-mangling命令来验证这一点:

指定为static的函数有一个本地符号(例如't'),而不是全局符号('T')。

Q:,如果足够多的符号(函数)从全局(外部)转换为局部(静态),那么链接时间会显著减少吗?

Q:如果对象是使用“发布”编译而不是“调试”编译创建的,那么应该期待类似的结果吗?

Q:链接说明符(extern/static)对对象文件的大小有影响吗?

注意:这个问题是关于链接速度和对象文件大小。这与将函数隐式声明为extern的含义无关。

EN

回答 1

Stack Overflow用户

发布于 2022-09-24 22:45:37

,如果足够多的符号(函数)从全局(外部)转换为局部(静态),那么链接时间会显著减少吗?

也许吧。当很多函数都是静态的时,链接器的工作量就会减少--链接器构建的符号表将会更小,在它们中的查找速度也会更快。

在实践中,这不太可能是可测量的--你可能需要有数万个符号,而且你必须将其中90%的符号转换成static,然后你才能真正观察加速。

如果对象是使用“发布”编译而不是“调试”编译创建的,那么

应该期待类似的结果吗?

有可能。在C++中,随着优化的进行,许多函数可能会内联。这反过来又为链接器留下了更少的工作。

链接说明符(extern/静态)对对象文件的大小有任何影响吗?

UNIX系统传统上在.o中包含用于调试的本地符号,因此externstatic没有任何影响。

但是您可以使用strip删除不必要的符号(用于进一步链接),然后带有static函数的.o将有更小的符号表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73796939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档