2016-03-22 24 views
0

Bir yapıda ve diğer ortak alanların içinde barındırılmış anonim birliğim var. Birliği yapı içinde belirli bir yere yerleştirmek için herhangi bir sebep var mı (örneğin, ilk veya son)?İç içe geçmiş birleşim C yapısında nereye yerleştirilir?

Örneğin, şudur: hiçbir şekilde

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

: Bundan daha

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

iyi

?

bağlam edilir gömülü-C, özellikle TI MSP430

+6

Bu ikisi arasında belirli bir fark yoktur. Bazı çok gelişmiş ve özel bellek düzeni nedenlerinden dolayı bir farklılık olabilir, ancak özel bir gereksiniminiz yoksa mükemmel bir şekilde eşdeğerdir. –

+0

Sanmıyorum, sendika tiplerinin aynı uzunlukta olmasını umuyorum. Sendikanın son öğe olmasını tercih ediyorum – Miguel13366

+0

Hangi yapıda daha az dolgu baytının olduğunu görmek için 'sizeof' kullanabilirsiniz. – mch

cevap

2

doldurma olası bir fark olabilir, bunlardan ikisi üzerinde sizeof() kullanarak ve sonuçları karşılaştırarak öğrenebilirsiniz. Ağır kısıtlanmış bellek miktarlarıyla uğraşırken bu durum geçerli olabilir.

Bunun dışında bunlar eşdeğerdir.

+0

Her iki yerleşim varyantı için de geçerli olabilir. – Olaf

+1

@Olaf Evet, bu yüzden test etmeyi önerdim. Sisteminin buna nasıl karar vereceğine dair bir kristal topum yok. – Magisch

+0

Bu yüzden bu soru çoğunlukla görüşülen, dolayısıyla OT. – Olaf