我想在LLVM中使用每个struct元素的细粒度偏移量。例如:
struct A{
int a;
int b;
};
struct B{
int c;
struct A sa;
};
struct B s;
对于struct B,我想枚举其中的每个元素,即:offset(s.c)= 0,offset(s.sa.a)= 4,offset(s.sa.b)= 8。如何在我的传递中获取此信息(可以使用哪种API?)而不是dump()?
答案 0 :(得分:6)
使用Module::getDataLayout获取DataLayout对象,该对象可以StructLayout
作为DataLayout::getStructLayout的回报。 StructLayout
具有getElementOffset()方法,可以满足您的需求。
答案 1 :(得分:1)
这是您使用offsetof
的地方int main() {
cout << offsetof(A, a) << ' ' << offsetof(A, b);
}