跨平台位字段顺序和对齐:一个神话
虽然结构中位字段的顺序可能看起来是特定于平台的,问题仍然是特定于平台的编译器打包选项是否可以保证一致的数据存储。
考虑以下内容场景:
struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__));
在带有 GCC 的 Intel 处理器上,字段在内存中的布局如下:版本在前,然后是类型。
但是,跨平台可移植性仍然难以实现。打包选项是编译器扩展,并不完全可移植。此外,C99 §6.7.2.1,第 10 段明确指出位域分配顺序(从高位到低位,反之亦然)是实现定义的。
即使相同的编译器也可以表现出不同的位域布局取决于目标平台的字节顺序。因此,依赖编译器特定的打包选项来保证跨平台数据顺序和对齐并不是一个可靠的方法。
以上是编译器打包是否保证跨平台位域顺序和对齐?的详细内容。更多信息请关注PHP中文网其他相关文章!