环境:OpenSSL 0.9.8l,Fedora 12
今天学习的是《OpenSSL编程》第五章 内存分配。这一章主要讲了 OpenSSL在内存分配时,是如何做的。在C语言中,一般使用的是malloc和free来申请和释放内存的。当然,在OpenSSL中,我们同样也可 以使用前面两个函数的使用内存。不过,OpenSSL也为我们提供了一些更强大的内存管理函数。这些函数主要强大在,可以方便地检查内存的泄露点,可以知 道某一次对内存的申请造成了多大的内存泄露,是哪个文件,哪行语句造成的。如果在程序中完全使用OpenSSL为我们提供的这些函数,我们就可以方便地找 到内存泄露点。
在开始之前,得先介绍几个变量:
LHASH *mh = NULL;//这个哈希表是用来存内存分配请求的,每请求一次内存,就给里面添一项,把内存释放时,就把相应的那一项去掉。key是MEM::addr。
LHASH *amih = NULL;//这个哈希表是用来存APP_INFO的。key是APP_INFO::thread。
下面,是在OpenSSL在内存方面使用的数据结构:
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
{
void *addr; //分配的内存的地址
int num; //分配内存的大小
const char *file; //申请内存的文件名
int line; //申请内存的行号
unsigned long thread; //申请内存的线程号
unsigned long order; //申请有内存的次数
time_t time; //申请内存的时间
APP_INFO *app_info; //相关信息
} MEM;
这个结构是用来描述内存块的,用户每使用OPENSSL_malloc成功申请一次内存,就会产生一个这样的结构体,并把这个结构体存入哈希
OpenSSL学习笔记——内存分配
最新推荐文章于 2023-07-17 15:40:39 发布