优化弱符号查找

时间:2013-03-03 20:44:19

标签: c++ linux gcc llvm binutils

如果您曾尝试在任何C ++程序上使用 nm 实用程序,您可能已经注意到许多符号被标识为“V”或“W”。两者都是不同类型的符号。

现在,在可执行文件中有大量的弱符号是不好的,因为在运行时动态链接器将尝试解决所有问题。我认为通过在链接可执行文件时强制执行一个简单的约定可以节省大量时间:

  • 每当在可执行文件中创建弱符号时,如果此符号具有默认值,则将其提升为常规符号。

这个黑客对我来说似乎很安全,因为:

  • 如果任何库定义了具有相同名称的弱符号,它将被提升的符号覆盖,这很好,因为对于弱符号我们可以自由选择任何定义
  • 如果没有图书馆实际定义这样的符号......没有什么特别的事情发生
  • 如果库定义了可执行文件中未定义的弱符号,则一切正常。

在我尝试与binutils开发人员讨论这个问题之前,我错过了一个很大的错误吗?

1 个答案:

答案 0 :(得分:0)

我没有看到任何可以阻止你在工作中描述的内容。

然而,我确实不知道这是否值得做。而且我很确定你的“binutils开发者”也会这么想。

所以我建议你看一些事情:在典型情况下,在可执行文件和动态库中定义的符号是多少?

由于很可能仍然存在大量未在可执行文件中定义的弱符号,您实际节省了多少时间?

现有程序的一些例子已被改进或至少是对“对于应用程序X而言,这么多时间用于平均查找弱符号,这是潜在的收益?”

这就是我作为binutils开发者所寻找的东西[我不是其中之一,但如果我是]。