我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
当我执行这个函数(在Ubuntu上用g ++ 4.6用-O3编译)时,我得到一个双变量,每次运行不同的值(4,5,7,8).为什么?在具有相同操作系统和相同编译器的另一台PC上,我总是得到3.
这些结果的其他可能原因是什么?
谢谢!
纯粹的机会.根据机器的不同,双倍必须以4的倍数或8的倍数(在普通机器上)对齐.8的对齐将返回3.或更多,因为对齐16,32,64 ...的任何内容也将对齐8.
你没有说出指针的来源,也没有说你正在执行的上下文(DLL等),所以很难说更多.出于安全原因,每次运行程序时,许多系统都会将静态数据,堆栈和/或可用空间竞技场放置在不同的地址.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |