union节省内存的类

1.基本概念   

Union是一种特殊的类,也是一种构造类型的数据结构。

在Union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。 

2.与struct的区别

 1.union和struct都是由多个不同的数据类型成员组成。

但在任何同一时刻,union只存放了一个被选中的成员,而struct的所有成员都存在。

2.对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了。

而对于结构体的不同成员赋值是互不影响的。

3. 在struct中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。

而在union中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。

3.使用类管理union成员

待续...

这是C++11的新特性,参考《C++ primer》5th中文版19.6节

4.SGI STL对union的使用

SGI SRL对alloc配置器的设计中使用到了union,第二级空间配置器使用union构建free-lists链表的节点。

union obj{
	union obj* free_list_link;
	char client_data[1];  /*The client sees this */
}

当客端释还一小块区块时,配置器回收到free-lists中,union看作一个指向下一个节点的指针。

当客户端使用区块时,union当作一个数据块。

alloc的第二级空间配置器_default_alloc_template中定义了一个私有成员,该成员包含16个指向obj的指针,用于维护16个free-lists,各自管理大小分别为8,16,...,128bytes的小额区块。

本文部分取自https://blog.csdn.net/veahlin/article/details/60144505

猜你喜欢

转载自blog.csdn.net/scqlovezy/article/details/82978779