2012-10-05 7 views
5
union u{ 
char ch[41]; 
int b[10]; 
}un; 

El LLVM recopile con este¿Cómo es el tipo de unión deriva en LLVM

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

y esto

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

    int intArr[10]; 
}uno; 

recopile con este

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

¿Puede alguien explicar cómo el tipo de unión se deriva?

Respuesta

4

El primer miembro es simplemente el miembro más alineado de la unión (selecciona arbitrariamente uno si hay varios de esos miembros), y se agrega una matriz de i8 para que tenga el tamaño correcto.

+0

¿Qué quieres decir con el miembro más alineado? ¿Significa el miembro cuyo valor numérico de alineación es más o qué? En el siguiente caso, cuál debería ser el miembro más alineado de la combinación double o int array unión def { \t int x [2] [2]; \t doble d; }; –

Cuestiones relacionadas