我有以下代码:
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;
}
当我执行这个函数(在Ubuntu上使用g ++ 4.6使用-O3编译)时,我会在每次运行时得到一个双变量不同的值(4,5,7,8)。为什么?在具有相同操作系统和相同编译器的另一台PC上,我总是得到3
这些结果的其他可能原因是什么?
谢谢!
答案 0 :(得分:5)
你没有说指针来自何处,也没有指出上下文 你正在执行(DLL等),所以很难说更多。 许多系统将放置静态数据,堆栈和/或免费 每次运行时,不同地址的空间竞技场 程序,出于安全原因。
答案 1 :(得分:0)
在具有大地址空间的机器上,变量可以位于大于4个字节的边界上(对于32位对齐)。
使用这些样本尝试您的功能:
0x100,0x101,0x102,0x104,0x108,0x110
根据您提供的信息,我只能说每次调用时程序可能不在同一个地方。因此,指针可能具有不同的值。
数据也是如此。