2011-08-04 7 views
0

ここに32ビットのC++プログラムがあり、好奇心から逆アセンブリをチェックしていました。私は、次のstructていますblah->バーにアクセスすると、私は次のようにシンプルな構造体の整列/パディングの質問

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

注意:

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

4にblahのアドレスに追加する必要がない理由だから私の質問は、ありますbarにアクセスしますか? charが1バイトであり、それで良いラウンド4を作れるので、私は3を理解するでしょう...

+1

これは基本的にそれです。 –

+2

それはfooの終わりではなく、構造体の先頭に追加しています。なぜならそれは4であり、3ではないからです。 – Joe

+0

ah、duh。答えとして投稿し、私はそれを受け入れる。 –

答えて

2

blahのベースアドレスに4を加算しています。私はそれがちょうどのアドレスに3を加えることと同じであると思います。fooの後です。 :)

これは実際に位置合わせの問題です。ポインタは4の倍数のアドレスに配置する必要があります。