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

LLVM kompiluje do tegojaki jest typ Unii pochodzi z LLVM

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

i to

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

    int intArr[10]; 
}uno; 

kompiluje do tego

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

Może ktoś wyjaśnić jak typ unii jest wyprowadzony?

Odpowiedz

4

Pierwszy członek jest po prostu najbardziej wyrównanym członkiem unii (wybiera dowolnie, jeśli istnieje wielu takich członków), a tablica i8 jest dołączana, aby uzyskać odpowiedni rozmiar.

+0

co masz na myśli przez najbardziej wyrównanego członka? Czy to oznacza członka, którego wartość numeryczna linii trasowania jest większa czy co? W poniższym przypadku, jaki powinien być najbardziej wyrównany element unii podwójnej lub int array { \t int x [2] [2]; \t podwójne d; }; –