# Memcached源码阅读八 内存池 `Memcached`内部维护了一个**内存池**来减少频繁的`malloc`和`free`,在该内存池的基础上面实现了**slab内存管理**,下面简单介绍下内存池的实现,大家在实现类似结构时,可以做个参考。 ``` static void *mem_base = NULL;//mem_base指向新申请的内存空间,指向整个内存空间的头部 static void *mem_current = NULL;//指向已经分配过的空间,且指向已经分配了空间的尾部 static size_t mem_avail = 0;//剩余空间大小 //部分初始化操作 mem_limit = limit;//初始容量 mem_base = malloc(mem_limit);//申请内存空间 if (mem_base != NULL) //如果不为空 { mem_current = mem_base; //当前还没分配,所以其指向为整个空间 mem_avail = mem_limit; //可用空间为满 } else { fprintf(stderr, "Warning: Failed to allocate requested memory in" " one large chunk.\nWill allocate in smaller chunks\n"); } //分配空间的过程,分配size大小的空间 static void *memory_allocate(size_t size) { void *ret; //如果未初始化 if (mem_base == NULL) { ret = malloc(size); } else { ret = mem_current; if (size > mem_avail) { return NULL; } //执行对齐操作 if (size % CHUNK_ALIGN_BYTES) { size += CHUNK_ALIGN_BYTES - (size % CHUNK_ALIGN_BYTES); } mem_current = ((char*)mem_current) + size; if (size < mem_avail) { mem_avail -= size; } else { mem_avail = 0; } } return ret; } ```