我有以下代码:差异数据对准
int byte_align(void * ptr)
{
int power = 2, n = 1, result = 0;
size_t address = reinterpret_cast<size_t>(ptr);
while(address%power == 0)
{
power *=2;
result = n;
n++;
}
return result;
}
当我执行该功能(与-O3在Ubuntu编译克++ 4.6),I得到有关每个双变量运行不同的值(4,5,7,8)。为什么?在另一台具有相同操作系统和相同编译器的PC上,结果总是3。
这些结果有什么其他可能的原因?
谢谢!
你正在编译32位还是64位? –
你作为ptr传递什么? – Reunanen
@Pukku:我通过一个地址加倍,例如'double x; func(&x);' –