用户在使用内存时,容易犯的错误就是内存泄露。当用户调用内存分配和释放函数时,查找内存泄露比较麻烦。 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 函数来设置。下面主要介绍了 openssl 内置的内存分配和释放函数。