2016-03-22 9 views
0

Ich habe eine anonyme Union in einer Struktur verschachtelt, sowie andere allgemeine Felder. Gibt es einen Grund, die Union an einer bestimmten Stelle in der Struktur zu platzieren (z. B. zuerst oder zuletzt)?Wo eine verschachtelte Union in einer Struktur in C platzieren?

Zum Beispiel ist dies:

typedef struct _Message 
{ 
    MessageType type; 
    union 
    { 
     SystemMessageArgs systemArgs;    
     OtherMessageArgs usbArgs; 
    }; 
} Message; 

besser als diese:

typedef struct _Message 
{   
    union 
    { 
     SystemMessageArgs systemArgs;    
     OtherMessageArgs usbArgs; 
    }; 
    MessageType type; 
} Message; 

in irgendeiner Weise?

Der Kontext eingebettet-C, speziell TIs MSP430

+6

Es gibt keinen spezifischen Unterschied zwischen den beiden. Für einige sehr fortgeschrittene und spezifische Speicherlayout-Gründe könnte es einen Unterschied geben, aber wenn Sie keine besonderen Bedürfnisse haben, sind sie vollkommen äquivalent. –

+0

Ich denke nicht, hoffe, dass Ihre Gewerkschaftstypen die gleiche Länge haben. Ich bevorzuge die Vereinigung, um das letzte Element zu sein – Miguel13366

+0

Sie können 'sizeof' verwenden, um zu sehen, welche Struktur weniger Füllbytes hat. – mch

Antwort

2

Es kann eine mögliche Differenz in padding sein, können Sie, dass durch die Verwendung sizeof() auf beide herausfinden und die Ergebnisse zu vergleichen. Dies kann relevant sein, wenn Sie mit stark eingeschränkten Speicherbeträgen zu tun haben.

Ansonsten sind sie gleichwertig.

+0

Das kann für beide Platzierungsvarianten gelten. – Olaf

+1

@Olaf Ja, deshalb schlage ich vor, dass er es testet. Ich habe keine Kristallkugel dafür, wie sein System entscheiden wird, das zu puffern. – Magisch

+0

Deshalb ist die Frage meist rechthaberisch, also OT. – Olaf