本篇记录在学习Linux内核源码过程中对一些知道但不熟悉不会用的数据结构进行记录。
union
是在学习进程复制函数do_fork中遇到的:
<sched.h>
union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
struct thread_info和stack被声明为union 共享空间
“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。
union实例的分配空间类似于struct,按照其内部的数据类型所占字节数最大值的整数倍来划分,e.g. 下面的union每个实例所占空间是3*4 = 12.
union foo
{
char s[10];
int i;
};
参考 :http://baike.baidu.com/view/109447.htm?fr=aladdin
共用体和结构体有下列区别:
1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。