C の構造パディングについてこれを読みました: http://bytes.com/topic/c/answers/543879-what-structure-padding 記事の後にこのコードを書きました。 16 バイトのように、「struct pad2」のサイズは 12 にする必要があります。このコードをさまざまなレベルの最適化を使用して gcc でコンパイルしました。 sizeof() 演算子でさえ、両方とも 16 バイトになります。それはなぜです?
この情報は、バイト境界と完全な dma 転送の活用が重要な PS3 マシンのために必要です。
#include <stdio.h>
#include <stdlib.h>
struct pad
{
char c1; // 1 byte
short s1; // 2 byte
short s2; // 2 byte
char c2; // 1 byte
long l1; // 4 byte
char c3; // 1 byte
};
struct pad2
{
long l1;
short s1;
short s2;
char c1;
char c2;
char c3;
};
int main(void)
{
struct pad P1;
printf("%d\n", sizeof(P1));
struct pad P2;
printf("%d\n", sizeof(P2));
return EXIT_SUCCESS;
}