移植机器刀片的代码时,在结构中使用了过多的变量,为了节省ram空间,使用了__packed关键字进行了修饰。 举个例子:
struct{
哈拉; //1byte
intb; //4byte
charc[2]//2byte
双精度; //8byte
}Struct_A;
在计算机存储器中,结构变量的存储通常按字长对齐。 例如,如果在8位计算机上按字节对齐,则上述结构总共占用14 28=15字节。
在16位机器上,变量用2个字节对齐。 例如,名为a的成员是char类型,地址为0x80000000,只占一个字节,但下一个成员b不能使用地址0 x 800000001,必须使用0 x 800000002。 这将按字长对齐。 以上结构体占有的空间也就是2 4 2 8=16字节
同样,在32位计算机上,如果a位于0x80000000,则只能将b放入0x 800000004。 因为这里的字长是4字节。 以上结构占用空间4(4)8=20字节
也就是说总是有无用的字节。 这个目的很简单,因为在大多数计算机体系结构中,在内存操作时逐字访问效率最高,相当于交换空间和时间。 当然,某些计算机体系结构(如ARM )支持非对齐字传输。 这意味着变量不一定要根据字长对齐。 这可能会降低效率,但会节约存储空间。 将__packed关键字添加到mdk中可以生成没有对齐字的紧凑结构。 强制编译器以1字节对齐结构成员,但这些结构的占用空间仍然为15字节。 如果编译器不支持__packed关键字,则将其定义为空宏即可#define __packed