struct占用多大空间?这个问题跟struct对齐规则有关。首先看下面三个例子。
- typedef struct
- {
- int b;
- char c;
- short a;
- int d;
- }NODE_A;
- typedef struct
- {
- char c;
- int b;
- short a;
- int d;
- }NODE_B;
- typedef struct
- {
- int b;
- short a;
- short dzy;
- int d;
- char c;
- short dd;
- }NODE_C;
typedef struct
{
int b;
char c;
short a;
int d;
}NODE_A;
typedef struct
{
char c;
int b;
short a;
int d;
}NODE_B;
typedef struct
{
int b;
short a;
short dzy;
int d;
char c;
short dd;
}NODE_C;
sizeof()以上3个结果所得的值分别是12,16,16。struc及其元素遵从以下对齐规则:
- 1.数据类型自身的对齐值:就是基本数据类型的自身对齐值。
- 2.指定对齐值:#progma pack (value)时的指定对齐值value,这个暂时不管。
- 3.结构体或者类的自身对齐值:其成员中对齐值最大的那个值。
- 4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。