有一个结构体如下:
typedef struct test{
unsigned char a;
unsigned short b;
unsigned char c;
}test_t;
test_t Test1;
实际Test中有三个元素,一共是四个个字节,但是实际这个结构体占用了5个字节的空间,因为由于数据在内存中是对齐存放的。
可以改变一下a、b、c的顺序来优化结构体的空间占用,如下:
typedef struct test{
unsigned char a;
unsigned char c;
unsigned short b;
}test_t2;
test_t2 Test2;
经过上面的调整后,Test占用的存储空间就和实际的内部数据大小一致了。
这个特征在强制类型转换和数据拷贝的时候要特别注意
Test1 | Test2 | |
---|---|---|
占用空间/字节 | 5 | 4 |