优秀源码
文章平均质量分 87
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
展开
-
Nginx内存池源码剖析
整理逻辑就是先malloc把内存分配出来,然后遍历large链表找大块内存的头信息,看看哪个里面是空的被free了,如果找到了就把新分配的内存地址填进去就行,但是遍历了三个还没找到,那就不找了直接退出,利用小块内存分配移动last指针把大小内存头信息分配出来,然后把刚刚分配大块内存填进去就行。nginx处处体现了效率,就看三下,没有就用小块,因为小块的效率高,直接移动指针就行。整个释放流程,先释放外部资源,调用外部资源清楚函数回调,再释放大块,最后小块。对于内存池外部资源的释放。当剩的不够分配了进入。原创 2023-02-04 22:45:17 · 638 阅读 · 0 评论 -
SGI STL二级空间配置器源码剖析(2)
接着上回,这节开始说allocte内存分配的实现1、判断n是否大于128,如果大于128则直接调用一级空间配置器。如果不大于,则将n上调至8的倍数处,然后再去自由链表中相应的结点下面找,如果该结点下面挂有未使用的内存,则摘下来直接返回这块空间的地址。否则的话我们就要调用refill(size_t n)函数去内存池中申请。2、向内存池申请的时候可以多申请几个,STL默认一次申请nobjs=20个,将多余的挂在自由链表上,这样能够提高效率。原创 2023-02-03 22:17:34 · 524 阅读 · 4 评论 -
总结各种常见的池子
指的是一些资源,在需要时可以这些预先准备的资源。池化技术的优点主要有两个:提前准备和重复利用。像池化技术一些典型的池子就比如线程池,内存池,对象池,数据库连接池等等,线程的创建销毁,对象的创建销毁,内存的分配释放,数据库连接释放等等,做池子里面伴随着的就是生产者消费者模型。所以这些都是要搞清楚的。原创 2023-01-13 15:25:56 · 469 阅读 · 0 评论 -
SGI STL二级空间配置器源码剖析(1)
之前大概写过SGI STL相关的东西,讲了讲空间配置器的原理,这一系列就剖析一下源码。在C++STL里空间配置器做的事情就是分离了对象内存的开辟,释放,对象构造,析构我们看SGI STL的实现还是找到vector看他push_back实现会发现他的构造析构都是定义的全局的函数模板SGI STL两个allocator的实现还是一级的是malloc和free,和C++STL基本无差,不过二级的用内存池的方式实现就复杂了进到空间配置器源码看看。原创 2023-02-01 20:02:22 · 389 阅读 · 0 评论