次の単純な構造を検討してください。
struct Struct {
public:
char a;
short int b;
char c;
};
この構造体のインスタンスが偶数 (16 ビットでアラインされた) アドレスに配置されている場合、アラインメントを修正するために 2 つのパディング バイトが必要です (b
配列内の後続のインスタンスに対しても)。
ただし、インスタンスが奇数アドレスに配置される可能性があり、パディング バイトがなくてもアラインメントは正しくなります。
そこで私はテストを行い、Visual C++ 2010 がこれら 2 つのパディング バイトを追加することを観察しました。これは、常に偶数アドレスに配置されることを示しています。
オブジェクトごとに 2 バイトを節約して、なぜ VC++ はそれらを奇数のアドレスに配置しないのでしょうか? 私が気づいていないことはありますか?