STL 源码分析第二章: 空间配置器理解
来源:互联网 发布:信息流优化师招聘 编辑:程序博客网 时间:2024/05/16 09:46
本文及后面相关文章看STL 源码剖析以后自己的理解,没有侵权的意思,其中有些话是引用上面的内容,写的不是很好,方便以后自己想复习的时候翻看。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SGI版STL之空间配置:
个人觉得这章主要讲了在C++中STL关于内存如何获取与分配的机制,后面将会总结一下。
其中了解了STL中关于构造函数的实现:
下面的几个模块都在STL allocator类中,使用时需要自己定义;
#include<allocator>
allocator<int> alloc;
void construct (T1*p,const T2&value)
{
new(p) T1 (value);
}
void destroy(T*pointer)
{
Pointer->~T();//显示调用析构函数,我看C++ primer是这样解释的
} 还有第二个版本
allocate(size_t n) 在VC中必须是两个参数,第二个就写NULL;
deallocate(void*p,size_t n);
下面就是关于比较细一点的内存分配:
关于空间的申请如果大于128个字节,则使用malloc申请,也就是第一级配置器,释放使用free,相对而言比较简单,其中有一个要客户自己定义的一个handle,如果申请失败会怎么办,反复申请,使用死循环,成功则返回。
比较烦的是小于128字节时:使用第二级配置器,如果有可以区块就调用free list,否则会把申请的空间变为8的倍数,当然是大于申请的空间,其中主要有refill( ),chunk_alloc( )两个函数比较重要,这里其实主要讲了关于内存池如何空间的分配,一开始是默认使用一个区块后面有20个相同大小区块,每个区块的大小有一开始调用的refill来决定,区块使用的是union结构来管理各个区块的指向,一个有16个不同的区块8—128。
内存池中分三种情况: 内存池剩余的空间完全满足需求量,剩余空间不能满足需求量,但足够一个以上的区块,剩余空间连一个区块的大小都无法提供,则使用heap空间配置malloc为原来的2倍。
- STL 源码分析第二章: 空间配置器理解
- STL源码分析--第二级空间配置器
- STL源码分析—空间配置器
- STL源码分析—空间配置器
- STL空间配置器源码及其分析
- STL源码剖析_读书笔记:第二章 空间配置器 一级和二级配置器篇
- STL源码分析--空间配置器 第一级配置器
- 转载:深入理解STL源码(1) 空间配置器(allocator)
- 深入理解STL源码--空间配置器(allocator)
- STL源码剖析_读书笔记:第二章 空间配置器 构建简单的空间配置器篇
- 《STL源码剖析》读书笔记--第二章 空间配置器(allocator)
- STL源码剖析_读书笔记:第二章 空间配置器 内存池篇
- STL源码分析—空间配置器(续)
- STL源码分析—空间配置器(续)
- stl--分析空间配置器及源码实现
- 《STL源码剖析》STL空间配置器
- STL源码剖析 - 第2章 空间配置器
- 【STL源码剖析读书笔记】【第2章】空间配置器
- Core Animation编程指南
- Inno Setup制作实例:Inno Setup安装服务的代码
- 链表
- security用法
- Google chrome 支持 IE 版本的 系统
- STL 源码分析第二章: 空间配置器理解
- [已解决问题]android sdk Content Loader's has encountered a problem
- warning:deprecated conversion from string constant to 'char *'解决方案
- 数据和界面显示分开
- Lua学习笔记之协同程序
- 堆栈
- Xcodebuild使用方法
- 本科项目——基于STM32的室内温度控制系统
- gcc 编译时的 error trying to exec 'cc1plus': execvp: 没有那个文件或目录问题