if (large->alloc == NULL) {
large->alloc = p;
return p;
}
if (n++ > 3) {// 为了避免过多的遍历,限制次数为 0
break;
}
}
// 当遍历的 ngx_pool_large_t 节点中 alloc 都有指向的内存时,从小块内存中分配一个 ngx_pool_large_t 节点用于挂载新分配的大内存
large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);
if (large == NULL) {
ngx_free(p);
return NULL;
}
large->alloc = p;
large->next = pool->large;// 头插法 插入至大块内存链表中
pool->large = large;
return p;
}
第一次大块内存分配后的结构如下:
文章插图
文章插图
文章插图
文章插图
总结ngx_pool_t 内存分配方面
【创见内存怎么样 创建服务器内存】通过 current 和 d.next 来访问其他的内存池结构插入方式小块内存池通过尾插法插入至内存池链表的尾端大块内存通过头插法插入至large链表的首部限制次数小内存分配失败(failed)次数大于4次后就不再作为分配内存的池子了大内存只寻找 large 链表中前三节点是否可以挂载新分配的内存内存对齐,多处内存对齐减少内存跨 cache 的数量其实总体而言这是一个比较简单的内存池了,还是有一些内存浪费的地方,限制次数 可以说明这个情况,不过这也是在简单、高效和内存分配上的一个平衡了
经验总结扩展阅读
- 怎么样处理好夫妻关系 处理夫妻关系的方法
- 玛茜护肤品洁面乳 玛茜的护肤品怎么样
- 婚姻中妻子对你失望的表现 妻子对你失望是怎么样的
- 神行者2怎么样值得买吗 神行者2怎么样看油耗
- 失业|那些上有老、下有小的中年人失业后都怎么样了?
- 十二星座怎么样才能不分手
- 怎么样利用《易经》算卦 怎么算卦
- 比亚迪汽车怎么样驾驶 比亚迪汽车怎么样质量好吗
- 八马茶业怎么样知乎 八马茶业怎么样
- 贺兰山葡萄酒怎么样?