第五章 内存分配 / 5.3 主要函数

1)   CRYPTO_mem_ctrl

本函数主要用于控制内存分配时,是否记录内存信息。如果不记录内存信息,将不能查找内存泄露。开启内存记录调用CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON),关闭内存记录调用CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)。一旦CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)被调用,直到用户调用CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)前,用户所有的opessl内存分配都会被记录。

2)   CRYPTO_is_mem_check_on

查询内存记录标记是否开启。

3CRYPTO_dbg_malloc

本函数用于分配内存空间,如果内存记录标记开启,则记录用户申请的内存。当需要记录内存信息时,该函数本身也需要申请内存插入哈希表,为了防止递归申请错误,它申请内存记录信息前必须暂时关闭内存记录标记,申请完毕再放开。

4CRYPTO_dbg_free

释放内存,如果内存记录标记开启,还需要删除哈希表中对应的记录。

       5  CRYPTO_mem_leaks

将内存泄露输出到BIO中。

6CRYPTO_mem_leaks_fp

将内存泄露输出到FILE(文件或者标准输出),该函数调用了CRYPTO_mem_leaks

7CRYPTO_mem_leaks_cb

处理内存泄露,输入参数为用户自己实现的处理内存泄露的函数地址。该函数只需要处理一个内存泄露,openssl通过lh_doall_arg调用用户函数来处理所有记录(泄露的内存)