memcached内存管理
由于C语言直接 malloc、free 来向操作系统申请和释放内存时,在不断的申请和释放过程中,形成了一些很小的内存片段,无法再利用,这种空闲但无法利用内存的现象,称为内存的碎片化
如何解决内存碎片化
memcached 用 slab allocator 机制来管理内存有刺来解决内存碎片化问题
- 先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题。 分配给Slab的内存空间被称为Page,默认是1M。一个Slab下可以有多个Page
- 然后把一个Page分成很多个chunk块,chunk块是用于缓存记录的空间。Chunk的大小是先有一个基本值,根据增长因子来增大
- slab class:内存区类别(48byte-1M),每个类别有一个slab classId
- Memcached里面保存着slab内空闲的chunk列表,当收到要保存的item的时候,它会根据item的大小,去选择一个最合适的slab,然后找到空闲的chunk,把数据存放进去