【发布时间】:2012-02-12 12:38:31
【问题描述】:
简单的问题:当编译器面临对 pow() 的调用时,例如,使用 两个常量(即来自宏的值)(即来自宏的值),它是通过在编译时评估它来优化它,还是它仍然是在运行时计算?
例子:
#define V_BITMEM_GRID 3
#define V_BITMEM_TOTAL pow(V_BITMEM_GRID,2)
谢谢!
编辑如果没有,有没有办法在编译时将宏的平方/立方体计算为另一个宏(就像我在上面尝试的那样)?
【问题讨论】:
-
这将取决于编译器。你可以看看你的编译器生成的汇编代码。
-
如果您的编译器的优化器不在运行时评估 pow,模板元编程就可以完成这项工作
-
@DavidHeffernan - 模板元编程?我得调查一下。这些宏在多个循环中使用,对 pow() 的调用会非常费劲。
-
如果您只对常量的平方/立方感兴趣,我相信几乎所有编译器都会在编译时评估类似的内容:
#define V_BITMEM_GRID 3#define V_BITMEM_TOTAL V_BITMEM_GRID * V_BITMEM_GRID。在这种情况下,没有函数调用,而是一个具有常量值的简单数学运算符。
标签: c++ optimization pow