STL SGI内存的管理
来源:互联网 发布:炫酷黑客收徒网站源码 编辑:程序博客网 时间:2024/05/16 09:22
SGI中设计了双层配置器,第一层配置器直接使用malloc和free两个函数。第二层配置器则采用不同的方法。当客户请求的内存大于128bytes的时候,使用第一层配置器。
当小于或者等于128bytes的时候,使用第二层配置器。
第一层配置器直接使用malloc分配请求大小的space,并且返回。注意请求的时候,当请求的内存第一次不能使用malloc分配的时候,使用set_new_handler来处理错误的情况,再次使用while循环分配。具体细节看SGI源代码。
第二层配置器比较复杂,使用memory pool的方法管理内存。总共维护16个链表,管理的大小分别是8,16,、、、、128bytes的大小。
注意当申请的大小不是这样 的大小的时候,改变大小到合适的8的倍数。
list的结构定义:
union obj{
union obj *free_list_link;
char client[1];
}
我们理所当然的会想到,维护链表,需要不少的开销。我们使用union obj这个数据结构,其中第一个值是一个pointer,可以看做的链表中的next指针。第二个值可以看做是指向space的指针。
SGI里面存在chunk_alloc这个函数。主要是用来堆memory pool space的申请。当申请到的时候,根据客户的请求,连接到不同的链表当中。
chunk_alloc函数的调用是在链表没有空间的条件下。
- STL SGI内存的管理
- SGI STL 的内存管理
- SGI STL 的内存管理
- SGI STL 的内存管理
- SGI STL 的内存管理
- SGI STL 的内存管理
- SGI STL 的内存管理
- SGI STL 内存管理
- SGI STL 内存管理
- SGI STL 内存管理
- SGI STL内存分配管理
- SGI的内存管理
- SGI STL的内存池
- SGI STL的内存池
- SGI STL的内存分配器
- SGI STL的内存池
- SGI STL的内存池
- C++SGI版本STL内存管理
- 1.把二元查找树转变成排序的双向链表
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- Sqlite3编程初级入门
- 关于用户体验的一点看法
- OCH\OMS\OTS\MSP\RS\SPI解释
- STL SGI内存的管理
- Struts1学习笔记(1)-----MVC设计模式
- 再谈用户体验
- poj2151 dp求概率
- 知识点索引
- NIO双线程处理服务器原型完整源代码(续)
- SP合作管理办法(暂行)
- 编程语言新宠儿——Julia诞生记
- C#参数传递时到底发生了什么(ref)