これは私の構造体で、私は自分の構造体オブジェクトの割り当てサイズを知りたいです。構造体が最も高いデータ型のサイズを割り当てるのはなぜですか?
struct toCheckSize
{
int a;
char b;
};
struct toCheckSize v,w,z;
したがって、v、w、zに割り当てられるメモリのサイズはどのくらいですか?コンパイラごとに、それはVの大きさを言う、構造のW、Zで8
これは私の構造体で、私は自分の構造体オブジェクトの割り当てサイズを知りたいです。構造体が最も高いデータ型のサイズを割り当てるのはなぜですか?
struct toCheckSize
{
int a;
char b;
};
struct toCheckSize v,w,z;
したがって、v、w、zに割り当てられるメモリのサイズはどのくらいですか?コンパイラごとに、それはVの大きさを言う、構造のW、Zで8
サイズは、システム内の整数のサイズに依存します。整数のサイズはの実装と定義されています。しかし、あなたが構造体のために見ているサイズが8であることを考えると、私はそれがsizeof(int) == 4
と推測できます。任意のデータ型の
{
int a, --> 4 bytes
char b, --> 1 byte
--> padding 3 bytes
}
これはまた、整数の整列要件を示しています。 –
サイズは にはsizeof(INT)を考慮ベンダー= 4バイトと はsizeof(CHAR)= 1バイトに依存して次のようにサイズが
int main()
{
struct ex//ex is tag for this structure
{
char c;
int i;
};//this is the just declaration that ex tag is of the form
struct ex x,y,z;//memory will be allocated here
printf("%u %u %u\n",x,y,z);
printf("%u %u %u\n",&x,&y,&z);
printf("%u %u %u\n",sizeof(x),sizeof(y),sizeof(z));
printf("%u %u %u\n",sizeof(x.i),sizeof(y.i),sizeof(z.i));
printf("%u %u %u\n",sizeof(x.c),sizeof(y.c),sizeof(z.c));
return 1;
}
出力
ここでは、文字埋め込みのための が追加されて、配列constarintこれも依存
ベンダーしかし、次のコードを参照します
struct record
{
int id;
char name[20];
float salary;
};
struct record student;
はsizeof(学生); ====> 28bytesを。 パディングはメモリアライメントのために使用される文字列
のためのパディングを追加する必要はありませんので。現代のプロセッサは、デフォルトのパッキングを使用して整列されたメモリにアクセスすることにより、より良い性能を発揮します しかし、あなたは正確なサイズを詰めた構造を作るためにstruct __attribute__((__packed__)) toCheckSize
を使用することができます。 も参照してくださいStructure padding and packing
1)これはGCCの質問ではありませんでした。 2)自分のプラットフォームがアライメントされていないアクセスをサポートしていることをどのように知っていますか? –
[説明のプログラム](http://ideone.com/JMGNhP) – jxh
5バイトで、2つの配列を割り当てたとします。どのように両方の整数を整列させることができますか? –