2021SC@SDUSC openssl 内存分配

本文介绍了OpenSSL的内存分配机制,包括如何通过内置函数跟踪内存泄露,并提供了内存分配数据结构的详细说明。主要函数如CRYPTO_mem_ctrl用于控制内存检查,CRYPTO_dbg_malloc和CRYPTO_dbg_free分别用于分配和释放内存,而CRYPTO_mem_leaks系列函数用于检测内存泄露。文章还提到了如何自定义内存管理和泄露检测函数。
摘要由CSDN通过智能技术生成

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 {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值