在MSVC win32中对齐(double)

时间:2013-11-15 12:29:48

标签: c++ visual-studio memory-alignment

以下代码(msvc 2012,32bit):

#include <iostream>

int main()
{
    double d;
    std::cout<<_alignof(double)<<std::endl;
    std::cout<<((size_t)(&d)) % _alignof(double)<<std::endl;
    return 0;
}

输出有时:

8
0

但是,有时它是:

8
4

不对齐(double)= 8意味着双重对齐将是8?

我看过: http://msdn.microsoft.com/en-us/library/aa290049(v=vs.71).aspx 但我不确定我明白......

1 个答案:

答案 0 :(得分:0)

那是因为你在堆栈(&amp; d)上获取地址,在程序启动时动态计算起始地址。 _alignof(double)将始终返回8,因为对于基本类型,它与它们的大小相同。