数据对齐方面的差异

arc*_*pus 4 c++ alignment

我有以下代码:

    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.
这些结果的其他可能原因是什么?
谢谢!

Jam*_*nze 5

纯粹的机会.根据机器的不同,双倍必须以4的倍数或8的倍数(在普通机器上)对齐.8的对齐将返回3.或更多,因为对齐16,32,64 ...的任何内容也将对齐8.

你没有说出指针的来源,也没有说你正在执行的上下文(DLL等),所以很难说更多.出于安全原因,每次运行程序时,许多系统都会将静态数据,堆栈和/或可用空间竞技场放置在不同的地址.