我有以下代码:
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;
}
当我执行这个函数时(在带有 g++4.6 的 Ubuntu 上用 -O3 编译),我在每次运行不同的值(4、5、7、8)时得到一个 double 变量。为什么?在另一台具有相同操作系统和相同编译器的 PC 上,结果总是 3。
造成这些结果的其他可能原因是什么?
谢谢!
最佳答案
纯粹的机会。根据机器的不同,必须对齐 double 在 4 的倍数或 8 的倍数上(在普通机器上)。 对齐 8 将返回 3。或更多,因为任何 对齐 16、32、64... 也将对齐 8。
你不说指针来自哪里,也不说上下文 你正在执行的(DLL等),所以很难多说。 许多系统将放置静态数据、堆栈和/或空闲 每次运行时在不同地址的空间竞技场 程序,出于安全原因。
关于c++ - 数据对齐的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194863/