[C.C++] c语言packed,C 语言中 __packed

718 0
Honkers 2025-3-13 20:12:03 | 显示全部楼层 |阅读模式

关键字: __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------ |

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

参考文献:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行