博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05.openssl内存分配
阅读量:2243 次
发布时间:2019-05-09

本文共 1205 字,大约阅读时间需要 4 分钟。

5.1 openssl内存分配
openssl供用户调用内存分配等函数主要在crypto/mem.c中实现,其那只的分配函数在crypto/mem_dbg.c中实现。默认情况下mem.c中函数mem_dbg.c中实现。如果用户的内存分配函数以及查找内存泄漏的函数,可以通过CRYPTO_set_mem_functions函数和CRYPTO_set_mem_debug_function函数来设置。
5.2 内存数据结构
struct app_mem_info_st {
CRYPTO_THREAD_ID threadid;
const char *file;
int line;
const char *info;
struct app_mem_info_st *next;
int references; 被引用次数
}
struct mem_st {
void *addr; 分配内存的地址
int num; 分配内存的大小
const char *file; 分配内存的文件
int line; 分配内存的行号
CRYPTO_THREAD_ID threadid; 分配内存的线程ID
unsgined long order;第几次内存分配
time_t time; 内存分配时间
APP_INFO *app_info;用于存放用户应用信息,为一个链表,里面存放了文件、行号以及线程ID等信息。
void *array[30];
size_t array_siz;
}
5.3 主要函数
a.CRYPTO_mem_ctrl
功能:本函数主要用于控制内存分配时,是否记录内存信息。如果不记录内存信息,将不能查找内存泄漏
参数:
CRYPTO_MEM_CHECK_ON
CRYPTO_MEM_CHECK_OFF
CRYPTO_MEM_CHECK_DISABLE
b.CRYPTO_is_mem_check_on
查询内存记录标记是否开启
c.CRYPTO_dbg_malloc
本函数用于分配内存空间,如果内存记录标记开启,则记录用户申请内存。当需要记录内存信息时,改函数本身也需要申请内存插入哈希表,为了防止递归申请错误,他申请内存记录信息钱必须暂时关闭内存记录标记,申请完毕在放开。
d.CRYPTO_dbg_free
释放内存,如果内存记录标记开启,还需要删除哈希表中对应的记录。
f.CRYPTO_mem_leaks
将内存泄漏输出到BIO中
g.CRYPTO_mem_leaks_fp
将内存泄漏输出到FILE中(文件或者标准输出),该函数调用CRYPTO_mem_leaks.
h.CRYPTO_mem_leaks_cb
处理内存泄漏,输入参数为用户自己实现的处理内存泄漏的函数地址。该函数值需要处理一个内存泄漏,openssl通过lh_doall_arg调用用户函数来处理所有记录(泄漏的内存)

转载地址:http://pmwdb.baihongyu.com/

你可能感兴趣的文章
oracle中创建同义词(synonyms)表
查看>>
建立DB-LINK和建立视图
查看>>
普通视图和物化视图的区别(转)
查看>>
物化视图加DBLINK实现数据的同步_20170216
查看>>
Redis在京东到家的订单中的使用
查看>>
idea 注释模板设置
查看>>
单例模式singleton为什么要加volatile
查看>>
Oracle_spatial的空间操作符
查看>>
SDO_GEOMETRY结构说明
查看>>
oracle 的 SDO_GEOMETRY
查看>>
往oracle中插入geometry的两种方式
查看>>
Oracle Spatial中的Operator操作子 详细说明
查看>>
Oracle Spatial中SDO_Geometry详细说明
查看>>
oracle 聚合函数 LISTAGG ,将多行结果合并成一行
查看>>
Oracle列转行函数 Listagg() 语法详解及应用实例
查看>>
LISTAGG函数的用法
查看>>
Oracle Spatial操作geometry方法
查看>>
IDEA类和方法注释模板设置(非常详细)
查看>>
Java程序初始化的顺序
查看>>
Dubbo和Spring结合配置文件内容解析为bean的过程
查看>>