字节对齐原则:
1. 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍;
2. 结构体变量的长度为其最宽基本类型成员大小的整数倍
概括地讲,就是任何字节基本对象的首地址都必须是K的倍数,这样可以提高数据存取的效率,但会浪费一些空间。
__attribute__((packed))
用于告诉编译器取消结构在编译过程中的优化对齐。因为按照实际占用字节数进行对齐,是GCC特有的语法。
在TC下: struct my{char ch;int a;} sizeof(int)=2;sizeof(my)=3; (紧凑模式)
在GCC下:struct my{char ch;int a;} sizeof(int)=4;sizeof(my)=8; (非紧凑模式)
在GCC下:struct my{char ch;int a;}__attribute__((packed)) sizeof(int)=4;sizeof(my)=5;
__attribute__((attribute_list))
packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是字节对齐,对域(field)是位对齐。
宏跟踪调试:
__FUNC__:可以跟踪到发现错误的函数名
__LINE__:程序当前行数
__FILE__:程序所在文件名