编译器是按照成员顺序依次分配内存。 但也遵循边界对齐原则, 即按照成员中所占内存最大的容量分配 比如:
struct type{
char a
int b;
double c;
};
若结构体从0开始存储, 变量b的偏移量是多少? 按照平常的逻辑,是5。 其实是8. 类型double占8字节。 所以 整个结构体变量所占内存是24字节。 也就是说整形变量a占了8个字节。 可以想到,将c放到首位置, 可以节省8个字节, 即
struct type{
double b;
int a;
char c;
};
所以, 如果要声明大量的结构体变量 , 将大字节的成员排在首位,这样排列成员未尝不是一种省内存的办法! 但也不能牺牲可读性。 自己权衡一下