整数提升会影响64位性能吗?

以下面的代码为例:

uint32_t fg; uint32_t bg; uint32_t mask; uint32_t dest; ... dest = (fg & mask) | (bg & (~mask)); 

现在这个片段的所有操作数都是32位无符号整数。 使用32位int大小的C编译器,不会发生整数提升,因此整个操作以32位执行。

我的问题是,例如在维基百科上 ,显示通常甚至64位机器都有使用32位int大小的编译器。 符合C标准,它们不会将操作数提升到64位整数,因此可能会编译成性能较差甚至更大的代码大小的东西(只是假设16位操作是如何更昂贵的循环和指令大小的32位x86)。

主要问题是:我是否需要担心? (我相信我可能没有,因为通过优化启用一个理智的编译器可能能够省略严格遵循C标准显示的多余的gunk。请参阅示例代码,并考虑一般我的信念可能会少一些地面)

如果是这样(我实际上需要关注),你能推荐一些涵盖这个领域的方法(书籍,网站,等等)吗? (嗯,我知道这对于SO来说有点过时了,但是如果我只得到一个三个字,那么我认为这个有用得多, 是的,你做了!作为接受的答案)

我必须要担心吗?

不,不是真的。 读取主存储器或磁盘的成本降低通常会超出在64位寄存器中执行32位操作的额外成本。 使用32位整数数组的64位程序通常比使用64位整数数组的程序快。

同样,在编译时,优化大小通常比速度更好,因为缓存未命中通常比节省的cpu周期花费更多。