配置器中free_lists的结构如下:
union obj{
union obj* free_list_link;
char client_data[1];
}
因为为了维护链表。每个节点即需要用指针来指向实际区块,同时还要链接着下一个空闲节点。从而每个节点就需要额外的指针来指向下一个空闲节点,这就造成了额外负担。但是在实际赋值时,你只会二选一,要么表示实际区块,要么就表示下一个空闲块。这时你就可以用union联合体来帮你节省内存空间,我们用空间配置器本来就是为了合理的分配内存,不造成额外的浪费。
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。
union类型是共享内存,以sizeof最大的结构作为自己的大小。每个数据成员在内存中得起始地址是相同的,对于首地址的偏移量均为0;
下面举一个例子:
#include <iostream>
using namespace std;
union Test{
struct{
int x;
int y;
int z;
}s;
int k;
}myUnion;
int main()
{
myUnion.s.x = 4;
myUnion.s.y = 5;
myUnion.s.z = 6;
myUnion.k = 0;
cout<< myUnion.s.x <<endl;
cout<<