相关疑难解决方法(0)

如何在C/C++中检测机器字大小?

是否有一种或多或少可靠的方法(不一定完美)来检测我正在编译的目标体系结构机器字大小

通过机器字大小我的意思是整数累加器寄存器(例如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)

c c++ cpu-registers

13
推荐指数
2
解决办法
5097
查看次数

标签 统计

c ×1

c++ ×1

cpu-registers ×1