【发布时间】:2014-10-28 20:32:31
【问题描述】:
我对链接器如何消除未使用的函数和数据段的死代码有一个初步的了解。如果您使用正确的编译器和链接器标志,它将每个函数和数据成员放入它自己的部分,然后当链接器去链接它们时,它会看到,如果没有直接引用,没有任何东西链接到该部分,然后它不会链接那个部分进入最后的精灵。
我正在尝试协调它与函数指针的工作方式。例如,您可以有一个函数指针,其值基于用户输入。可能不是一件安全的事情,但是编译器和链接器将如何处理呢?
【问题讨论】:
-
那不是垃圾回收,一般叫
dead code eliminationen.wikipedia.org/wiki/Dead_code_elimination。 -
另请阅读 garbage collection 上的维基页面。实际上,GCC 有一个名为
ggc的internal GC(相当糟糕的IMNSHO;MELT 有一个更好的,并且在gcc内部运行),用于在编译时处理内部数据。与您的问题没有直接关系。 -
啊,对术语混淆感到抱歉。您传递给 gcc 的链接器标志是“--gc-sections”,所以这有点误导。我更新了问题。我的问题中提出的情况仍然存在。