SGI STL allocator
FuzhouJiang
专注后端、C/C++开发的菜鸟,相信日拱一卒、功不唐捐。欢迎各位对博文批评指正,互相学习
展开
-
SGI STL内存池源码移植
SGI STL内存池源码移植要考虑线程安全问题,因为是在容器中使用,这个移植的工作主要就是将SGI STL的二级空间配置器抽取出最小的部分实现我们自己的二级空间配置器从而能够应用在容器中。原创 2023-05-16 15:33:51 · 80 阅读 · 0 评论 -
SGI STL(七)——内存池总结
防止小块内存频繁分配、释放、造成很多的碎片出来,内存没有更多的连续的大内存块,所以应用对于小块内存的操作,一般都会使用内存池来进行管理对于每个字节数的chunk块分配,都是给出一部分进行使用,另一部分作为备用(开内存的时候*2),这个备用可给当前字节数使用,也可给其他字节数使用对于备用内存池划分完chunk块后 ,若还有剩余的很小内存块,再次分配时,会把这些小的内存块再次分配出去,备用内存池能够得到完美利用当指定字节数分配失败时,有一个异常处理。原创 2023-05-16 15:04:37 · 198 阅读 · 0 评论 -
SGI STL(六)——reallocate函数解析
函数主要用于内存池的。原创 2023-05-16 14:57:55 · 174 阅读 · 0 评论 -
SGI STL(五)——deallocate函数解析
内存池中小块内存释放采用头部归还的方式,归还块的指针指向空闲块链表头,将空闲块链表头修改为新归还的块的地址类似于重写对象的new和delete实现对象池的组织方式。原创 2023-05-16 14:55:29 · 99 阅读 · 0 评论 -
SGI STL(四)——_S_chunk_alloc函数解析
错误时的处理函数,进入该函数后,可以进行错误的处理,如果用户有设置对应处理函数,就会死循环直到内存分配成功。的逻辑,由于剩余空间大于0,则进行内存碎片的处理:把剩余的空间挂接到合适单位字节的trunk块上,即32B的trunk块上,指针做出了如下的变化。即(320 >= 160),将内存小块分配给用户,指针向下移动,即(这里指针画错了,是8字节的。, 即希望分配8个20B的内存小块构成的。),如下图(这里指针画错了,是8字节的。,故可以复用备用的内存块即进入代码的。,但是可以看到8B的。原创 2023-05-16 14:49:02 · 329 阅读 · 0 评论 -
SGI STL(三)——_S_refill函数解析
该函数功能是给中_Obj*为空的项建立空闲链表,即创建一个由多个相同内存小块构建成的大块chunk,并且使得每个小块指向下一个空闲小块。原创 2023-05-16 14:27:42 · 82 阅读 · 0 评论 -
SGI STL(二)——allocate内存分配函数
的逻辑(chunk块有内存小块可分配),图示如下。内存分配函数关键代码如下。使用二级空间配置器并进入。原创 2023-05-16 14:18:18 · 119 阅读 · 0 评论 -
SGI STL(一)——容器allocator概述
SGI STL有两个allocator(空间配置器)一级allocator内存管理使用;二级allocator使用内存池实现容器底层存储的对象的构造和析构,定义的是全局的函数模板construct和destroy// 调用定位new ++ _M_finish;// 转调用析构函数 } void allocator :: construct(pointer __p , const _Tp & __val) {// 内存池的粒度信息 enum {原创 2023-05-16 14:13:16 · 94 阅读 · 0 评论