我想写一些性能敏感的数字代码,涉及带有复数的长公式。考虑像a =(b + c)*(d + e + f)这样简单的东西。我更喜欢使用C ++(具有std :: complex类),但我担心编译代码可能会创建临时类对象来保存中间值b + c,d + e和d + e + f,因此导致减速。另一方面,Fortran具有本机复杂类型,这可能导致更好的编译器优化。代码是多维数值积分,性能瓶颈是对被积函数的评估。
现代C ++编译器(例如英特尔)在优化方面是否足够好,这实际上不是问题?
答案 0 :(得分:2)
所有Fortran都可以(也)模仿该类型 复杂数字没有本机机器类型(至少在x86上)。
你担心的是临时使用一些堆栈字节,就是它 如果没有其他理由保留它,即使堆栈大小调整也可以优化掉 Fortran没有什么可以做得更好的。
(Gcc和Clang通常不会比英特尔差。每个人都有一些好处和坏点)