返回信息流这两个指令是C中的吗?在C++中怎么用呢?求教。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #48267同步于 2010/12/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一下C++中align和packed的用法
mojie
2010/12/24镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
【 在 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(),取消前面写的自定义字节对齐方式。
上面说的这些都是编译器相关的,你可以查看编译器的手册,现在不同的编译器或者同意编译器的不同版本可能会有不同的处理。字打得太多,手都酸了。。。。。。
谢谢ls~~
【 在 lojo 的大作中提到: 】
: : 这两个指令是C中的吗?在C++中怎么用呢?求教。。。
: : --
: ==========================================================================
: ...................