是否有一种或多或少可靠的方法(不一定完美)来检测我正在编译的目标体系结构的机器字大小?
通过机器字大小我的意思是整数累加器寄存器(例如EAX在x86,RAX在x86_64等,尺寸不流扩展,段或浮点寄存器).
该标准似乎没有提供"机器字"数据类型.因此,我不是在寻找100%可移植的方式,只适用于大多数常见情况(Intel x86 Pentium +,ARM,MIPS,PPC - 即基于寄存器的现代商品处理器).
size_t并且uintptr_t听起来像是好的候选者(并且在实践中匹配我测试的所有寄存器大小)但当然是其他东西,因此不能保证总是如Is 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
Run Code Online (Sandbox Code Playgroud)