下面的代碼(MSVC 2012年,32位):alignof(雙)在MSVC的win32
#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
alignof(double)= 8是否意味着double的對齊將是8?
Iv'e看出: http://msdn.microsoft.com/en-us/library/aa290049(v=vs.71).aspx ,但我不知道我的理解是......
您的文本顯示'alignof',但您的代碼顯示'_alignof'(並且鏈接的網站會討論另一個'__alignof'),我們在這裏談論哪些?我可以想象他們有微妙的差異。 – PlasmaHH
文章告訴你,對於32位代碼,堆棧對齊爲4,並且編譯器會在必要時努力將其對齊到8。核心問題是你沒有給它足夠的理由去做這件事。你實際上必須*使用變量來使它對齊。當你在生成的代碼中看到'和esp,0FFFFFFF8h'時,你就會知道你在前面。 –
我試過使用這個變量。它仍然不是8字節對齊的。 – eranb