我的目标是减少我的C项目的可执行文件的大小,我已经尝试了所有编译器/链接器选项,这在一定程度上有所帮助.我的代码包含很多单独的文件.我的问题是,将所有源代码合并到一个文件中是否有助于我想要的优化?我在某处读到,如果编译器在单个文件中找到所有代码而不是单独的多个文件,则会更好地优化.真的吗?
当编译器在同一个可编译 (*.c) 文件中找到所需的代码时,它确实可以更好地优化。如果你的程序长于 1000 行左右,你可能会后悔将所有代码放在一个文件中,因为这样做会使你的程序难以维护,但如果短于 500 行,你可能会尝试使用一个文件,并且看看是否没有帮助。
关键的考虑因素是一个可编译文件中的代码调用或以其他方式使用在另一个可编译文件中定义的对象(包括函数)的频率。如果跨越此边界的控制转移很少,那么擦除边界不会对性能有明显帮助。因此,在为了性能而编码时,关键是将紧密相关的代码放在同一个文件中。
我非常喜欢你的问题。在我看来,这是正确的问题。而且,尽管完整的答案不够简单,无法在 Stackexchange 答案中充分处理,但您对答案的追求将教会您很多东西。尽管您可能还没有意识到,您的问题确实与链接有关,这是每个高级程序员最终都必须学习的主题。您的问题涉及符号表、内联、返回值的就地构造以及其他几个微妙的因素。
无论如何,如果您的程序少于 500 行左右,那么尝试单文件方法不会有什么损失。如果超过 1000 行,则不建议使用单个文件。