2021SC@SDUSC
5 内存分配
man openssl_malloc
5.1 openssl内存分配
用户在使用内存时,容易犯的错误就是内存泄露。
当用户调用内存分配和释放函数时,查找内存泄露比较麻烦。
openssl提供了内置的内存分配/释放函数。
如果用户完全调用openssl的内存分配和释放函数,可以方便的找到内存泄露点。
openssl分配内存时,在其内部维护一个内存分配哈希表,用于存放已经分配但未释放的内存信息。
当用户申请内存分配时,在哈希表中添加此项信息,内存释放时删除该信息。
当用户通过openssl函数查找内存泄露点时,只需查询该哈希表即可。
用户通过openssl回调函数还能处理那些泄露的内存。
openssl供用户调用的内存分配等函数主要在crypto/mem.c中实现,其内置的分配函数在crypto/mem_dbg.c中实现。
默认情况下 mem.c 中的函数调用 mem_dbg.c 中的实现。
如果用户实现了自己的内存分配函数以及查找内存泄露的函数,
可以通过调用 CRYPTO_set_mem_functions 函数和 CRYPTO_set_mem_debug_functions 函数来设置。
5.2 内存数据结构
openssl内存分配数据结构是一个内部数据结构,定义在crypto/mem_dbg.c中。
如下所示:
typedef struct app_mem_info_st {
unsigned long thread;
const char *file;
int line;
const char *info;
struct app_mem_info_st *next; /* tail of thread's stack */
int references;
} APP_INFO;
typedef struct mem_st {