STL学习笔记之union obj
来源:互联网 发布:java字符串处理题目 编辑:程序博客网 时间:2024/06/10 01:08
最近看STL源码剖析时遇到了一个有趣union的用法,简单谈谈自己的看法
STL第二级空间配置器中,自由链表的节点结构如下:
union obj{
union obj * free_list_link;
char client_data[1];
};
书上给的解释是这样的:“上述obj所用用的是union,由于union之故,从其第一字段观之,obj可被视为—个指针,指向相同形式的另一个obj。从其第二字段观之,obj可被视为一个指针,指向实际区块。一物二用的结果是,不会为了维
护链表所必须的指针而造成内存的另一种浪费。”
护链表所必须的指针而造成内存的另一种浪费。”
第一句话很好理解,在此就不再赘述,本文将探讨的重点放在第二句话,即其为何指向实际区块。
现在看下面一段代码的运行结果
如图所示,指针p所存的地址为0x008ff7a0即为数组m1首元素地址,同时data首元素地址与数组m首元素地址相同。
对此,我的理解是:此时test = (union obj*)m;使得test指向数组m所在空间,则data[0]所占空间为m[0]所占空间,于是data所指空间即为m所指空间。
由上述可知在第二级空间配置器中,自由链表某节点client_data所指地址即为该区块首地址。
阅读全文
0 0
- STL学习笔记之union obj
- STL空间配置器的union obj
- STL空间配置器的union obj
- STL之学习笔记
- STL源码剖析配置器中的union obj
- obj-c学习笔记
- STL学习笔记之sstream
- STL学习笔记之小结
- STL之vector学习笔记
- STL之list学习笔记
- 学习笔记之String.valueOf(Object obj)剖析
- stl之顺序容器学习笔记1
- stl之顺序容器学习笔记2
- stl之顺序容器学习笔记3
- stl之关联容器学习笔记1
- stl之关联容器学习笔记2
- stl之顺序容器学习笔记1
- stl之顺序容器学习笔记2
- linux 网络虚拟化:network namespace 简介
- Hibernate初学者---多对多双向关联数据表的CRUD增删改查
- BZOJ 1637: Balanced Lineup 巧妙变换
- shell的使用
- Codeforces Round #438 (Div. 1 + Div. 2 combined) B. Race Against Time
- STL学习笔记之union obj
- Java 9 linux安装与配置环境变量
- 什么是虚函数,虚函数和普通函数有何不同,带有虚函数的类什么时候都可以实例化吗?
- 在浏览器中输入www.baidu.com后执行的全部过程
- Linux 文件与目录管理 —— 创建、删除、移动与链接 mkdir mv rm ln
- ros 多个电脑通信
- 1134. Vertex Cover (25)
- 坚持#第203天~云计算平台
- HYSBZ2648-SJY摆棋子(kd-tree)