5
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 }

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

4

1 回答 1

4

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

于 2012-10-06T06:06:31.960 回答