Union Type是如何在LLVM中派生的

时间:2012-10-05 08:07:53

标签: llvm unions

union u{
 char ch[41];
 int b[10];  
}un;

LLVM编译到此

%union.u = type { [10 x i32], [4 x i8] }

和这个

union un{
  struct s{
    int a;
    float f;
    double d;
  }st;

  int intArr[10];
}uno;

编译到此

%union.un = type { %struct.s, [24 x i8] }
%struct.s = type { i32, float, double }

任何人都可以解释联合类型的派生方式吗?

1 个答案:

答案 0 :(得分:4)

第一个成员只是联合中最对齐的成员(如果有多个这样的成员,它会随意选择一个成员),并附加一个i8数组以使其大小合适。