2017-02-18 3 views
-1

これは私の構造体で、私は自分の構造体オブジェクトの割り当てサイズを知りたいです。構造体が最も高いデータ型のサイズを割り当てるのはなぜですか?

struct toCheckSize 
{ 
    int a; 
    char b; 
}; 

struct toCheckSize v,w,z; 

したがって、v、w、zに割り当てられるメモリのサイズはどのくらいですか?コンパイラごとに、それはVの大きさを言う、構造のW、Zで8

+0

[説明のプログラム](http://ideone.com/JMGNhP) – jxh

+0

5バイトで、2つの配列を割り当てたとします。どのように両方の整数を整列させることができますか? –

答えて

-1

サイズは、システム内の整数のサイズに依存します。整数のサイズはの実装と定義されています。しかし、あなたが構造体のために見ているサイズが8であることを考えると、私はそれがsizeof(int) == 4と推測できます。任意のデータ型の

{ 
    int a, --> 4 bytes 
    char b, --> 1 byte 
      --> padding 3 bytes 
} 
+0

これはまた、整数の整列要件を示しています。 –

0

サイズは には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; 
} 

出力

See the output of this program

ここでは、文字埋め込みのための が追加されて、配列constarintこれも依存

ベンダーしかし、次のコードを参照します

struct record 
{ 
    int id; 
    char name[20]; 
    float salary; 
}; 
struct record student; 

はsizeof(学生); ====> 28bytesを。 パディングはメモリアライメントのために使用される文字列

-2

のためのパディングを追加する必要はありませんので。現代のプロセッサは、デフォルトのパッキングを使用して整列されたメモリにアクセスすることにより、より良い性能を発揮します しかし、あなたは正確なサイズを詰めた構造を作るためにstruct __attribute__((__packed__)) toCheckSizeを使用することができます。 も参照してくださいStructure padding and packing

+0

1)これはGCCの質問ではありませんでした。 2)自分のプラットフォームがアライメントされていないアクセスをサポートしていることをどのように知っていますか? –

関連する問題