这段代码的输出结果是多少?
4+1=5?
那你就错了
是8!
为了CPU取数方便,提高效率,编译器一般会把数据安排到合适的位置
一般数在内存中存放的起始地址都是4的倍数,称为“4字节对齐”
所以在这里,char虽然只占1字节,但是后面也给它填充3个字节,凑够4个字节
struct s{int a;char c1};
struct s{int a;char c1,c2};
struct s{int a;char c1,c2,c3};
struct s{int a;char c1,c2,c3,c4};
的大小都是8字节
所以,在写结构体的时候要注意安排变量的顺序
struct s{int a;char c1;int b;char c2};
struct s{int a;int b;char c1;char c2};
两者所占的内存空间是不一样的,前者是16,后者是12
调整一下结构体中变量的位置,有时候就能省下不少内存哦
我的一个程序就因为这样小小的调整,使用内存从25减到了21,何乐而不为呢