将源代码合并到一个文件中以进行优化

标签 c optimization

我的目标是减少我的 C 项目的可执行文件的大小,并且我已经尝试了所有编译器/链接器选项,这在一定程度上有所帮助。我的代码由许多单独的文件组成。我的问题是将所有源代码合并到一个文件中是否有助于实现我想要的优化?我在某处读到,如果编译器在单个文件中找到所有代码而不是单独的多个文件,那么它会更好地优化。是真的吗?

最佳答案

当编译器在同一可编译 (*.c) 文件中找到需要 代码时,它确实可以更好地优化。如果你的程序超过 1000 行左右,你可能会后悔把所有代码放在一个文件中,因为这样做会使你的程序难以维护,但如果少于 500 行,你可以尝试一个文件,并且看看它是否有帮助。

关键的考虑因素是一个可编译文件中的代码调用或以其他方式使用另一个定义的对象(包括函数)的频率。如果越过此边界的控制转移很少,那么删除边界将不会对性能有明显帮助。因此,在编写性能代码时,关键是将紧密相关的代码放在同一个文件中。

我非常喜欢你的问题。在我看来,这是一个正确的问题。而且,虽然完整的答案不够简单,无法在 Stackexchange 答案中完整处理,但您对答案的追求会教给您很多东西。尽管您可能还没有意识到,您的问题实际上与链接有关,这是每个进步的程序员最终都必须学习的主题。您的问题涉及符号表、内联、返回值的就地构造以及其他几个微妙的因素。

无论如何,如果您的程序少于 500 行左右,那么尝试单文件方法不会有什么损失。如果超过 1000 行,则不建议使用单个文件。

关于将源代码合并到一个文件中以进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973858/

相关文章:

c - 为什么 time() 不调用系统调用?

c - C语言中使用for循环反转字符串

javascript - 对非阻塞脚本的痴迷

c# - 运行时优化 C# -> MySQL

c - 错误: can't find a register in class ‘GENERAL_REGS’ while reloading ‘asm’

c++ - 矩阵的平均四分之一

c - 错误输出(指针)

java - 欧拉计划 #7 优化

iphone - 在编译时识别 iDevices,最佳实践

performance - 一种估计或预测一段 HTML 的 Jsoup 处理时间的方法?