union thread_union { struct thread_info thread_info; unsigned lon">
本篇記錄在學(xué)習(xí)Linux內(nèi)核源碼過程中對一些知道但不熟悉不會用的數(shù)據(jù)結(jié)構(gòu)進(jìn)行記錄。
union
是在學(xué)習(xí)進(jìn)程復(fù)制函數(shù)do_fork中遇到的:
<sched.h>
union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
struct thread_info和stack被聲明為union 共享空間
“聯(lián)合”是一種特殊的類,也是一種構(gòu)造類型的數(shù)據(jù)結(jié)構(gòu)。在一個“聯(lián)合”內(nèi)可以定義多種不同的數(shù)據(jù)類型, 一個被說明為該“聯(lián)合”類型的變量中,允許裝入該“聯(lián)合”所定義的任何一種數(shù)據(jù),這些數(shù)據(jù)共享同一段內(nèi)存,已達(dá)到節(jié)省空間的目的(還有一個節(jié)省空間的類型:位域)。 這是一個非常特殊的地方,也是聯(lián)合的特征。另外,同struct一樣,聯(lián)合默認(rèn)訪問權(quán)限也是公有的,并且,也具有成員函數(shù)。
union實(shí)例的分配空間類似于struct,按照其內(nèi)部的數(shù)據(jù)類型所占字節(jié)數(shù)最大值的整數(shù)倍來劃分,e.g. 下面的union每個實(shí)例所占空間是3*4 = 12.
union foo
{
char s[10];
int i;
};
參考 :http://baike.baidu.com/view/109447.htm?fr=aladdin
共用體和結(jié)構(gòu)體有下列區(qū)別:
1. 共用體和結(jié)構(gòu)體都是由多個不同的數(shù)據(jù)類型成員組成, 但在任何同一時刻, 共用體只存放了一個被選中的成員, 而結(jié)構(gòu)體的所有成員都存在。
2. 對于共用體的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結(jié)構(gòu)體的不同成員賦值是互不影響的。
上一篇 [Java Performance] 字符串拼接注意事項
下一篇 HDU 5050 Divided Land 2014 ACM/ICPC Asia Regional Shanghai Online