1. 概述
默认情况下,libevent使用C库的内存管理函数在堆上分配内存(其实也就是我们在C中经常使用的malloc、realloc和free)。当然如果对于内存的管理有极高的要求,例如在我们的应用程序中可能频繁的申请和释放libevent相关的对象,如果采用默认的内存管理,那么可能就会产生大量的内存碎片造成效率下降,如果对于我们的网络应用程序来说这种效率的下降是不可接受的,那么我们就需要自己提供内存管理函数了 ,比如内存池技术。
在libevent中使用自定义的内存管理函数,就是在使用libevent之前注册对应的分配、释放等接口。
2. libevent的内存管理
libevent的内存管理API定义在头文件mm-internal.h。如同头文件表现的那样,这些API是libevent内部使用,用于管理分配和释放libevent相关对象。
#ifndef EVENT__DISABLE_MM_REPLACEMENT
void *event_mm_malloc_(size_t sz);
void *event_mm_calloc_(size_t count, size_t size);
char *event_mm_strdup_(const char *str);
void *event_mm_realloc_(void *p, size_t sz);
void event_mm_free_(void *p);
#define mm_malloc(sz) event_mm_malloc_(sz)
#define mm_calloc(count, size) event_mm_calloc_((count), (size))
#define mm_strdup(s) event_mm_strdup_(s)
#define mm_realloc(p, sz) event_mm_realloc_((p), (sz))
#define mm_free(p) event_mm_free_(p)
#else
#define mm_malloc(sz) mall