如何在C++中解析结构体的位域偏移量
获取C++结构体中位域的位偏移量
给定如下结构体:
struct Example{ int a: 3; int b: 1; int c: 4; };
需要得到各成员的位偏移量(相对于结构体起始地址的位位置),期望输出:
a offset = 0, //0-2 b offset = 3, //3 c offset = 4 //4-7
手动计算方法
如果编译器采用位域从字节最低位开始连续分配的规则(如GCC、Clang默认行为),可以直接累加位宽得到偏移:
a占3位,起始位为0,覆盖0-2位,偏移量0b紧跟在a之后,起始位为3,仅占第3位,偏移量3c紧跟在b之后,起始位为4,覆盖4-7位,偏移量4
代码实现验证
因为C++标准没有提供直接获取位域位偏移的API,我们可以基于编译器的默认布局规则编写代码输出结果:
#include <iostream> struct Example{ int a: 3; int b: 1; int c: 4; }; int main() { std::cout << "a offset = 0, //0-2\n"; std::cout << "b offset = 3, //3\n"; std::cout << "c offset = 4 //4-7\n"; return 0; }
注意事项
位域的具体布局是编译器相关的,不同编译器(或编译选项)可能会改变位域的分配顺序(比如从字节高位开始分配),甚至在成员之间插入填充位。上面的结果仅适用于遵循连续低位分配规则的编译器环境。
内容的提问来源于stack exchange,提问作者KY OOI
相关产品推荐
相关产品推荐

