【发布时间】:2013-09-24 10:34:36
【问题描述】:
我有以下内联方法,并在其他方法中多次调用它。具有 O2 优化的 vc 和 gcc 编译器是否能够注意到该值在调用方法中是固定的并且只评估一次? -- 实际上indexAndFlag 在这些方法中没有改变。 -- 或者,也许为了线程安全,每次调用都会对其进行评估?
unsigned int indexAndFlag;
...
inline Index* index() const
{
return (Index*)(indexAndFlag & ~1);
}
代码仅适用于保护模式 x86 32/64 位架构,所以我希望,我可以假设 sizeof(unsigned int) == sizeof(Index*)。如果不是,请纠正我。
【问题讨论】:
-
最好检查一下。 objdump -d ...
-
我不知道 x86/64 的保护模式是什么,但你可以断言大小是否相同
标签: c++ visual-c++ optimization gcc inline