最近读文档,发现对内存对齐的概念不太明白。 内存对齐的原则:
可以运行以下代码验证:
#include<stdio.h>
typedef struct bb {
int id; //[0]....[3]
double weight; //[8].....[15] 原则1
float height; //[16]..[19],总长要为8的整数倍,补齐[20]...[23] 原则3
} BB;
typedef struct aa {
char name[2]; //[0],[1]
int id; //[4]...[7] 原则1
double score; //[8]....[15]
short grade; //[16],[17]
BB b; //[24]......[47] 原则2
} AA;
int main() {
AA a;
printf("a = %d,b = %d",sizeof(a),sizeof(BB));
return 0;
}
如果在开始的时候加入#pragma pack(1),意即按一位对齐,也就是没有内存对齐,可以再次运行实验。