数据对齐方面的差异

时间:2013-11-25 13:53:03

标签: 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;
    }

当我执行这个函数(在Ubuntu上使用g ++ 4.6使用-O3编译)时,我会在每次运行时得到一个双变量不同的值(4,5,7,8)。为什么?在具有相同操作系统和相同编译器的另一台PC上,我总是得到3 这些结果的其他可能原因是什么?
谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

在具有大地址空间的机器上,变量可以位于大于4个字节的边界上(对于32位对齐)。

使用这些样本尝试您的功能:
0x100,0x101,0x102,0x104,0x108,0x110

根据您提供的信息,我只能说每次调用时程序可能不在同一个地方。因此,指针可能具有不同的值。

数据也是如此。