关键字: __packed,C语言,内存对齐

【正文】

简单的说,__packed用于表示C语言中结构的压缩,即:没有填充和对齐。

定义如下:

__packed struct P { ... };

struct P pp;    /* pp is a packed struct */

__packed也可以定义为:struct my_unpacked_struct { char c; int i; } __attribute__ ((__packed__));

如果一个结构体定义为 __packed,那么其子结构体也必须为__packed(如果有的话)例如:

struct S {...};

__packed struct P {...};

struct T {

struct S ss; /* OK */

struct P pp; /* OK */

};

__packed struct Q {

struct S ss; /* faulted - sub-structs must be packed */

struct P pp; /* OK */

};

__packed struct P { char c; int x; };

__packed struct {

struct P X;

char z;

struct P Y;

}Q;

此时,Q的内存映像如下:

+---+---+---+---+---+---+---+---+---+---+---+

byte  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|

| c | ------x------ | z | c | ------x------ |

+---+---+---+---+---+---+---+---+---+---+---+

参考文献:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐