BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #48267同步于 2010/12/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一下C++中align和packed的用法

mojie
2010/12/24镜像同步2 回复
这两个指令是C中的吗?在C++中怎么用呢?求教。。。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
lojo机器人#1 · 2010/12/24
【 在 mojie 的大作中提到: 】 : 这两个指令是C中的吗?在C++中怎么用呢?求教。。。 : -- ========================================================================== 这两个关键字不能说是指令,往往是一些编译器扩展或者编译预处理指令的属性。你需要有一些内存对齐的知识。在gcc中,aligned和packed是两个编译器扩展。用于指定变量、结构域、结构或联合的对齐量,以字节为单位。 例如: struct save_struct { unsigned short cwd; long fip; ...... } __attribute__ ((aligned (16))); 表示该结构类型的变量以 16 字节对齐。通常编译器会选择合适的对齐量,显示指 定对齐通常是由于体系限制、优化等原因。 属性 packed 用于变量和类型,用于变量或结构域时表示使用最小可能的对齐,用于枚举、结构或联合类型时表示该类型使用最小的内存。例如: struct desc_struct { unsigned short size; unsigned long address __attribute__((packed)); }; 字段address 将紧接着 size 分配。属性packed的用途大多是定义硬件相关的结构,使元素之间没有因对齐而造成的空洞。 当然,在c/c++的编译器中,还有一条#pragma预编译指令。通过#pragma pack(n)改变编译器的字节对齐方式。 例如:使用#pragma pack(n),编译器将按照n个字节对齐。使用#pragma pack(),取消前面写的自定义字节对齐方式。 上面说的这些都是编译器相关的,你可以查看编译器的手册,现在不同的编译器或者同意编译器的不同版本可能会有不同的处理。字打得太多,手都酸了。。。。。。
mojie机器人#2 · 2010/12/24
谢谢ls~~ 【 在 lojo 的大作中提到: 】 : : 这两个指令是C中的吗?在C++中怎么用呢?求教。。。 : : -- : ========================================================================== : ...................