union obj { union obj * free_list_link; char client_data[1]; };
// 算法:allocate // 输入:申请内存的大小size // 输出:若分配成功,则返回一个内存的地址,否则返回NULL { if(size 大于 128) 启动第一级分配器直接调用malloc分配所需的内存并返回内存地址; else { 将size向上round up成8的倍数并根据大小从free_list中取对应的表头free_list_head if(free_list_head 不为空) { 从该列表中取下第一个空闲块并调整free_list,返回free_list_head } else { 调用refill算法建立空闲块列表并返回所需的内存地址 } } } // 算法:refill // 输入:内存块的大小size // 输出:建立空闲块链表并返回第一个可用的内存地址 { 调用chunk_alloc算法分配若干个大小为size的连续内存区域并返回起始地址chunk和成功分配的块数nobj if(块数为1) 直接返回 chunk; else { 开始在chunk地址块中建立free_list 根据size取free_list中对应的表头元素free_list_head 将free_list_head 指向chunk中偏移起始地址为size的地址处,即free_list_head = (obj*)(chunk+size) 再将整个chunk中剩下的nobj-1个内存块串联起来构成一个空闲列表 返回chunk,即chunk中第一个空闲的内存块 } } // 算法:chunk_alloc // 输入:内存块的大小size,预分配的内存块数nobj(以引用传递) // 输出:一块连续的内存区域的地址和该区域内可以容纳的内存块的块数 { 计算总共所需的内存大小total_bytes if(内存池足以分配,即end_free-start_free >= total_bytes) { 则更新start_free 返回旧的start_free } else if(内存池不够分配nobj个内存块,但至少可以分配一个) { 计算可以分配的内存块数并修改nobj 更新start_free并返回原来的start_free } else // 内存池连一个内存块都分配不了 { 先将内存池的内存块链入到对应的free_list中后 调用malloc操作重新分配内存池,大小为2倍的total_bytes为附加量,start_free指向返回的内存地址 if(分配不成功) { if(16个空闲列表中尚有空闲块) 尝试将16个空闲列表中空闲块回收到内存池中再调用chunk_alloc(size,nobj) else 调用第一级分配器尝试out of memory机制是否还有用 } 更新end_free为start_free+total_bytes,heap_size为2倍的total_bytes 调用chunk_alloc(size,nobj) } } // 算法:deallocate // 输入:需要释放的内存块地址p和大小size { if(size 大于128字节) 直接调用free(p)释放 else { 将size向上取8的倍数,并据此获取对应的空闲列表表头指针free_list_head 调整free_list_head将p链入空闲列表块中 } }
您还没有登录,请您登录后再发表评论
第1 章 STL 概论与著作版本简介 第2 章 空间配置器(allocator) 第3 章 迭代器(iterators)概念与 traits 编程技法 第4 章 序列式容器(sequ ence containers) 第5 章 开关式容器(associated containers) 第6 ...
2.2 具备次配置力(sub-allocation)的sgi 空间配置器 047 2.2.1 sgi 标准的空间配置器,std::allocator 047 2.2.2 sgi 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...
2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...
第2章 空间配置器(allocator) 第3章 迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive containers) 第6章 算法(algorithms) 第7章 仿函数...
疱丁解牛(侯捷自序) 前言 第1章 STL概论与版本简介 第2章 空间配置器(allocator) 第3章 迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive ...
第2章 空间配置器(allocator) 第3章迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive containers) 第6章 算法(algorithms) 第7章 仿函数...
整个模块准备对学习STL源码剖析之后做一个系统的STL源码剖析,这些都是我个人的理解,如果分析有什么问题欢迎各位大佬们指出。也很感谢作者以及网络中各个大佬的总结,让我也能更容易更深刻的理解到STL强大和方便,...
本仓库包含以下内容:注释过的SGI STL二级空间配置器源码以及进行的分析整理注释过的nginx内存池二进制以及进行的分析整理my_stl_allocator my_nginx_mem_pool目录背景在学习编程的过程中,一味的闭门造车是不可取的...
MiniSTL根据《 STL源码剖析》实现简易的STL标准库的一个子集实现基本功能学习模板编程文件描述已完成空间配置器:接口simple_alloc,一级配置器allocator,二级配置器alloc构造:constructor析构:deatroy内存初始化...
再硬核|5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码 硬核|万字长文炸裂!手撕 STL 迭代器源码与 traits 编程技法 超硬核 | 2 万字+20 图带你手撕 STL 序列式容器源码 硬核来袭 | 2 万字 + 10 图带你手撕 ...
c++和stl源码剖析(视频+代码) Prime c++:第一章到第六章 前面和prime c没什么太大的区别,就暂且不进行记录 stl源码剖析 STL是C++标准库的一部分,占据了大部分的比例。STL借助模板把常用的数据结构及其算法都...
12_直接通过内存标号操作内存空间_课堂答疑 13_中午课程回顾 14_内存四区基本原理_全局区案例理解 15_内存四区_堆栈案例理解 16_课堂答疑_理解指针的关键关键在内存 17_vs20102013上配置#系列快捷方式 18_栈的属性和...
相关推荐
第1 章 STL 概论与著作版本简介 第2 章 空间配置器(allocator) 第3 章 迭代器(iterators)概念与 traits 编程技法 第4 章 序列式容器(sequ ence containers) 第5 章 开关式容器(associated containers) 第6 ...
2.2 具备次配置力(sub-allocation)的sgi 空间配置器 047 2.2.1 sgi 标准的空间配置器,std::allocator 047 2.2.2 sgi 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...
2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() ...
第2章 空间配置器(allocator) 第3章 迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive containers) 第6章 算法(algorithms) 第7章 仿函数...
疱丁解牛(侯捷自序) 前言 第1章 STL概论与版本简介 第2章 空间配置器(allocator) 第3章 迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive ...
第2章 空间配置器(allocator) 第3章迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive containers) 第6章 算法(algorithms) 第7章 仿函数...
整个模块准备对学习STL源码剖析之后做一个系统的STL源码剖析,这些都是我个人的理解,如果分析有什么问题欢迎各位大佬们指出。也很感谢作者以及网络中各个大佬的总结,让我也能更容易更深刻的理解到STL强大和方便,...
本仓库包含以下内容:注释过的SGI STL二级空间配置器源码以及进行的分析整理注释过的nginx内存池二进制以及进行的分析整理my_stl_allocator my_nginx_mem_pool目录背景在学习编程的过程中,一味的闭门造车是不可取的...
MiniSTL根据《 STL源码剖析》实现简易的STL标准库的一个子集实现基本功能学习模板编程文件描述已完成空间配置器:接口simple_alloc,一级配置器allocator,二级配置器alloc构造:constructor析构:deatroy内存初始化...
再硬核|5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码 硬核|万字长文炸裂!手撕 STL 迭代器源码与 traits 编程技法 超硬核 | 2 万字+20 图带你手撕 STL 序列式容器源码 硬核来袭 | 2 万字 + 10 图带你手撕 ...
c++和stl源码剖析(视频+代码) Prime c++:第一章到第六章 前面和prime c没什么太大的区别,就暂且不进行记录 stl源码剖析 STL是C++标准库的一部分,占据了大部分的比例。STL借助模板把常用的数据结构及其算法都...
12_直接通过内存标号操作内存空间_课堂答疑 13_中午课程回顾 14_内存四区基本原理_全局区案例理解 15_内存四区_堆栈案例理解 16_课堂答疑_理解指针的关键关键在内存 17_vs20102013上配置#系列快捷方式 18_栈的属性和...