是否有一种或多或少可靠的方法(不一定是完美的)来检测我正在编译的 目标架构 的 _机器字长_?
机器字大小 是指整数累加器寄存器的大小(例如 x86 上的 EAX、x86_64 上的 RAX 等, 而不是 流扩展、段或浮点寄存器)。
该标准似乎没有提供“机器字”数据类型。所以我 不是 在寻找一种 100% 可移植的方式,只是在最常见的情况下工作(Intel x86 Pentium+、ARM、MIPS、PPC——即基于寄存器的现代商品处理器)。
size_t
和 uintptr_t
听起来像不错的候选者(实际上与我测试的所有地方的寄存器大小相匹配)但当然是其他东西,因此不能保证总是这样做,正如已经描述的那样在 size_t 是单词大小。
语境
假设我在一块连续的数据上实现了一个散列循环。生成的哈希值取决于编译器是可以的,只有速度很重要。
示例: http ://rextester.com/VSANH87912
在 Windows 上进行的测试表明,64 位块的散列在 64 位模式和 32 位模式下的 32 位中更快:
64-bit mode
int64: 55 ms
int32: 111 ms
32-bit mode
int64: 252 ms
int32: 158 ms
原文由 rustyx 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想你想要
sizeof(size_t)
这应该是索引的大小。 IE。ar[index]
32 bit machine
64 bit machine
它可能更复杂,因为 32 位编译器在 64 位机器上运行。他们的输出 32 即使机器有更多的能力。
我在下面添加了 Windows 编译器
Visual Studio 2012 compiled win32
Visual Studio 2012 compiled x64