我对链接器如何消除未使用的函数和数据段的死代码有初步的了解。如果您使用正确的编译器和链接器标志,它会将每个函数和数据成员放入它自己的部分,然后当链接器链接它们时,它将看到,如果没有直接引用,没有任何链接到该部分然后它不会链接那个部分变成了最终的 Sprite 。
我正在尝试调和函数指针的工作方式。例如,您可以有一个函数指针,其值基于用户输入。这样做可能不是一件安全的事情,但是编译器和链接器将如何处理呢?
最佳答案
如果不显式引用函数,就没有可移植的方法来分配函数指针(例如,您不能对函数指针使用指针算法)。
因此,从您的程序可以访问的每个函数也必须在代码中被命名和引用,并且链接器会知道它。甚至将函数指针存储在数组中,如:
typedef void (*Callback)();
Callback callbacks[] = { foo, bar, baz };
足以确保列出的函数将包含在链接的可执行文件中(数组内容将在加载时或链接时固定,具体取决于平台)。
关于c - gcc 使用函数指针消除死代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617934/