gpt4 book ai didi

c++ - 内联值的优化

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:29 25 4
gpt4 key购买 nike

我有以下内联方法,并在其他方法中多次调用它。具有 O2 优化的 vc 和 gcc 编译器是否能够注意到该值在调用方法中是固定的并且只评估一次? -- 事实上 indexAndFlag 在那些方法中没有改变。 -- 或者,也许为了线程安全,每次调用都会对其进行评估?

unsigned int indexAndFlag;
...

inline Index* index() const
{
return (Index*)(indexAndFlag & ~1);
}

该代码仅适用于保护模式 x86 32/64 位架构,所以我希望,我可以假设 sizeof(unsigned int) == sizeof(Index*)。如果不对,请指正。

最佳答案

如果,正如看起来那样,indexAndFlag 是一个非常量非静态全局变量,那么就不是。编译器无法确定另一个翻译单元是否会修改它,因此程序必须在使用它的任何地方访问它的值。

如果它是const,并用常量表达式初始化,那么编译器必须将其视为常量值,并且您的表达式应该也被视为常量值(value)。

I hope, I can assume sizeof(unsigned int) == sizeof(Index*)

我不会:许多流行的 64 位架构都有一个 32 位的 int。使用 uintptr_t 来确定。

关于c++ - 内联值的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com