/ngx

for learn

Primary LanguageC

前言

Nginx的内存管理是通过内存池实现的。Nginx的内存池设计非常的精巧,很多场景下,我们可以将Nginx的内存池实现抽象出来改造成我们开发中内存池。

传统方式分配内存的弊端

一般我们使用malloc/alloc/free等函数来分配和释放内存,会有一些弊端:

  • 虽然系统自带的ptmalloc内存分配管理器,也有自己的内存管理方案(申请内存块以及将内存交还给系统都有自己的优化方案),但是直接使用malloc/alloc/free,仍然会导致内存分配的性能比较低。
  • 频繁使用这些函数分配和释放内存,会导致内存碎片,不容易让系统直接回收内存。典型的例子就是大并发频繁分配和回收内存,会导致进程的内存产生碎片,并且不会立马被系统回收。
  • 容易产生内存泄漏。

使用内存池的优点

  • 提升内存分配效率。不需要每次分配内存都执行malloc/alloc等函数
  • 让内存的管理变得更加简单。内存的分配都会在一块大内存上,回收的时候只需要回收大块内存就能将所有的内存回收,防止了内存管理混乱和内存泄漏的问题。