简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
本篇目的:理解C++之修改结构体成员字节对齐
#include
typedef struct{
char a;
int b;
} DATA;
int main(void){
printf("sizeof(DATA)=%ld\n",sizeof(DATA));
}
编译 : g++ test.cpp -o test
运行:./test
打印:
sizeof(DATA)=8
DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。
1byte | 1byte | 1byte | 1byte | 1byte |
---|---|---|---|---|
a(char) | 1byte | 填充1byte | 填充1byte | 填充1byte |
b(int) | 1byte | 1byte | 1byte | 1byte |
编译 : g++ -fpack-struct=2 test.cpp -o test
运行:./test
打印:
sizeof(DATA)=6
DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。
1byte | 1byte | 1byte | 1byte | 1byte |
---|---|---|---|---|
a(char) | 1byte | 填充1byte | ||
b(int) | 1byte | 1byte | 1byte | 1byte |
n
”时,将没有填充字节,所有成员将一个挨着一个排在一起。
编译 : g++ -fpack-struct test.cpp -o test
运行:./test
打印:
sizeof(DATA)=5
DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。
1byte | 1byte | 1byte | 1byte | 1byte |
---|---|---|---|---|
a(char) | 1byte | |||
b(int) | 1byte | 1byte | 1byte | 1byte |