2016-09-03 4 views
-4
struct abc 
{ 
int x; 
char p; 
double x; 
char x1; 
int x2; 
char x3; 
}; 

出力:sizeof(abc)バイトサイズは、メンバ変数のサイズにaccoring異なる

同じコード32である

struct abc 
    { 
    int x; 
    char p; 
    double x; 
    char x1; 
    char x3; 
    int b3; 
    }; 

sizeof(abc)の出力である24バイト

どのように整数の後に定義されてcharecterのための8バイト以上を取る第1プログラムコンパイラで?

+4

正しい位置合わせのためにパッドが付けられています。 –

答えて

1

コンパイラは構造体に余分なアライメントバイトを追加します。 Visual Studioで、あなたはこの見に文書化されていない/ d1reportAllClassLayoutでコンパイルするかもしれません:あなたは、コンパイラを見るように

1> class tsp size(24): 
1>  +--- 
1> 0 | x1 
1> 4 | x5 
1> 8 | x10 
1> 16 | p3 
1>  | <alignment member> (size=4) 
1>  +--- 

の構造の最後に追加の4つのバイトを追加しました。

+0

しかし、x10はポインタ変数なので、そのサイズは8バイトなので、構造のサイズは4 + 4 + 4 + 8 = 20バイトでなければなりませんが、ubuntu 12.04 –

+0

の24バイトはhttps: /en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding非常にうまく説明されています: "さらに、データ構造全体が最終的な名前のないメンバーで埋められるかもしれません。これは、構造体配列の各メンバーが適切に整列することを可能にします。 – marcinj

関連する問題