2011-08-04 99 views
0

我在這裏有一個32位的C++程序,並且出於好奇而檢查反彙編。我有以下結構:簡單的結構對齊/填充問題

struct Blah 
{ 
    char foo; 
    std::string bar; 
}; 

當訪問blah->吧,我注意到以下幾點:

; ... address of blah is in eax 
003A227B add   eax,4 

所以我的問題是,爲什麼需要4被添加到blah的地址得到bar?我會理解3,因爲char是1個字節,這將使一個不錯的第4輪...

+1

是的,基本上就是這樣。 –

+2

它將它添加到結構的開始,而不是結束foo,這就是爲什麼它是4而不是3。 – Joe

+0

啊,杜。發佈作爲答案,我會接受它。 –

回答

2

它將4加入基地址blah。我想這與添加3到後的地址相同foo。 :)

這確實是一個對齊問題。指針應該對齊的地址是4的倍數。