2012-03-04 8 views
0

可能性の重複:
構造体の内部と外部でchar変数のサイズが4から1に変わるのはなぜですか?

Why isn't sizeof for a struct equal to the sum of sizeof of each member?

ここではコードである:ここ

#include <stdio.h> 

struct small{ 
    int a; 
    int b; 
    char c; 
}; 

void main(){ 
    printf("The size of int is: %d\n",(int)sizeof(int)); 
    printf("The size of char is: %d\n",(int)sizeof(char)); 
    printf("The size of small is: %d\n",(int)sizeof(struct small)); 
} 

が出力される。

The size of int is: 4 
The size of char is: 1 
The size of small is: 12 

私はsmallのサイズが9であることを期待していますが、それは12であることがわかります

+5

あなたの期待は単に間違っています。構造体のサイズはメンバーのサイズの合計であると誰も言わなかった。 –

+5

これは、配置制約のためです。それはここで何百回も尋ねられています。 – Coren

+0

上記のコメントに追加するには、stddef.hの 'offsetof'マクロを調べてください。それは、構造内の特定のメンバのオフセット(バイト単位)を評価します – pmohandas

答えて

1

これはアライメントの必要条件によるものです。あなたがstruct smallの配列を宣言した場合:

struct small arr[10]; 

は、各要素の aは、前の要素の直後になります。あなたのシステムでは、明らかに、 intは、絶対的な必要条件として、あるいは最適なパフォーマンスのために、4バイト境界—に整列する必要があります。—したがって、 struct smallaが正しく整列するように、3バイトのパディングが含まれています。

関連する問題