1

VC ++で、char以外のデータ型が使用されている場合に、コンパイラが構造体のみをパディングするのはなぜですか?

つまり

struct TEST
{
   char a[7];
};

struct TEST2
{
   __int32 a;
   char b[7];
};

sizeof(TEST); // Returns 7
sizeof(TEST2); // Returns 12
4

1 に答える 1

2

sizeof(char) == 1それは、常に-という事実に帰着します。

配列は連続している必要があるため、charの配列(十分に大きい場合)では、可能なすべての配置で要素が作成されます。コンパイラ/ハードウェアそれを機能させる必要があるので、どちらかのようなもので処理するためにパディングを挿入する必要はありませんcharstruct

さて、それはコンパイラがパディングを挿入できなかったということではありません。たとえば、charの配列を使用している場合でも、そうすることでパフォーマンスを向上させることができる場合があります。たとえば、struct定義を考えると、コンパイラが7文字の配列にもう1文字を埋め込んで、構造体8のサイズ(2のすてきな累乗)にすることは完全に許容されます。

一部のハードウェアでは、それが表示される可能性があります。たまたま、VC ++でサポートされているIntelハードウェアは、そのようなことからあまり恩恵を受けていないため、そこではほとんど見られません。

于 2012-06-15T01:36:45.837 に答える