【发布时间】:2012-07-26 06:17:26
【问题描述】:
根据我的理解,创建具有多个编译单元的程序的主要好处是组件的可重用性和在合并小的更改时更短的编译时间。
我还认为(可能是错误的)与此相关的惩罚是,在它们自己的编译单元中定义的函数不能声明为“内联”。
[我认识到这个关键字实际上并没有强制编译器内联扩展函数,但我的理解是它为编译器提供了更大的优化灵活性,因此值得尽可能包括在内。]
到目前为止一切顺利吗?
我真正的问题是,当程序解决复杂的建模问题时,成本/收益分析是否仍然有利于多个编译单元,并且需要在集群上迭代其主循环数月才能生成有用的输出。
假设一个多编译单元程序需要几分钟来编译,而重新配置为单个编译单元的相同程序需要几个小时来编译...如果单个编译单元将所有函数声明为内联并因此呈现更多优化机会,我认为执行时间可以减少几个百分点似乎是合理的,而不是弥补额外的编译时间。
对于这种情况是否有很好的经验法则,还是严重依赖于情况?
【问题讨论】:
-
现在在每个人都发送垃圾邮件“过早优化”之前。我会说是的,确实有可能从将所有内容塞进一个编译单元中获得超过几个百分比的收益。我已经完成并亲眼目睹了。
-
对于性能问题,数据胜过争论。测试和测量。
-
很容易低估在编写代码时点击“编译”的次数,即使您的更改微不足道。
标签: c++ compilationunit