带包装的尺寸结构(推,1)
sizeof struct with pack(push,1)
我在qt项目中具有结构:
#pragma pack(push,1)
struct test1{
uint8_t a1 : 3;
uint8_t a2 : 1;
uint8_t a3 : 3;
uint8_t a4 : 1;
uint8_t a5 :3;
uint8_t a6 : 1;
uint16_t a7 : 12;
};
#pragma pack(pop)
检查尺寸。
qDebug() << "sizeof(Mi28NE::test1)" << sizeof(Mi28NE::test1);
导致MINGW编译器:
>> sizeof(Mi28NE::test1) 3
导致MSVC编译器:
>> sizeof(Mi28NE::test1) 4
为什么?
bitfield是特定于实现的。
看来MSVC使用
struct test1{
uint8_t // a1, a2, a3, a4
uint8_t // a5, a6
uint16_t // a7
};
可能是因为a6
使用uint8_t
,而a7
使用uint16_t
。
GCC似乎将a5
和a6
打包到a7
使用的uint16_t
中。
您可能有更多相似的结果:
#pragma pack(push,1)
struct test1{
uint8_t a1 : 3;
uint8_t a2 : 1;
uint8_t a3 : 3;
uint8_t a4 : 1;
uint16_t a5 : 3;
uint16_t a6 : 1;
uint16_t a7 : 12;
};
#pragma pack(pop)
此结构的大小返回真实答案:
#pragma pack(push,1)
struct test1{
uint8_t a1 : 3;
uint8_t a2 : 1;
uint8_t a3 : 3;
uint8_t a4 : 1;
uint16_t a5 : 3;
uint16_t a6 : 1;
uint16_t a7 : 12;
};
#pragma pack(pop)
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- C结构,其指针将被包装在unique_ptr中
- 将此私有删除器函数包装在结构中的目的是什么?
- C++-用和结构相同的语法围绕结构构造包装类
- 使用 C++ shared_ptr 用删除器包装 C 结构
- COM 自动化结构与它们的包装器
- 是可移植的包装结构
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 将 c++ 函数包装为 c#,具有结构的总动态大小
- 带有柔性阵列构件的包装结构的便携式替代方案
- 叮当叮当当大约__attribute__((包装)),即使结构需要打包
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 带包装的尺寸结构(推,1)
- 为对象创建"thin"结构包装器的正确方法是什么?
- 填充C 中C结构的填充字节?(不关心结构包装!)
- 将C结构包装在WPF应用程序中
- 如何将 C 结构包装在 C++ 类中并保持相同的名称
- 何时会出现结构包装问题
- 具有单个成员的自定义结构(包装器)的集合(也是自定义结构)到单个成员的集合
- 你能把一个异常继承层次结构包装到另一个吗?——或者,另一种干净的处理方式