面试题答案
一键面试- 优化后结构体定义:
struct Data {
char flag;
short value3;
int value1;
double value2;
};
- 优化前后内存占用变化:
- 优化前:
char
占1字节,int
占4字节,double
占8字节,short
占2字节。- 由于对齐规则,
char
后int
需补齐3字节,int
占4字节,double
占8字节,double
后short
需补齐6字节,short
占2字节。所以一个struct Data
结构体大小为(1 + 3)+4 + 8+(6 + 2)=24
字节。 dataArray[1000]
占用内存为24 * 1000 = 24000
字节。
- 优化后:
char
占1字节,short
占2字节,无需补齐,int
占4字节,无需补齐,double
占8字节,无需补齐。一个struct Data
结构体大小为1+2 + 4+8 = 15
字节,按对齐规则需补齐为16字节。dataArray[1000]
占用内存为16 * 1000 = 16000
字节。- 内存占用减少了
24000 - 16000 = 8000
字节。
- 优化前:
- 调整原因:
- 按照对齐规则,尽量将占用字节数小的成员放在前面,占用字节数大的成员放在后面,这样可以减少补齐字节数,从而减少结构体整体的内存占用。在对内存使用极为敏感的项目中,这种优化可以显著节省内存空间。