/************************************************************************ * * Copyright (C) 2003-2004 * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * * 用于调试内存泄漏的对内存分配函数 * * 创建日期: 2005/04/12 * ***********************************************************************/ #ifndef __OS_HEAP_H_ASDFJLCXJVZXHCROEYUIODFGFMHFOIUHSDIHFZXKJCHGVLSDHFAJD #define __OS_HEAP_H_ASDFJLCXJVZXHCROEYUIODFGFMHFOIUHSDIHFZXKJCHGVLSDHFAJD #include "basetype.h" /*! * \brief 堆内存分配 * * \param size 希望分配的内存的尺寸 * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 * 如果等于NULL, 表示匿名源代码文件名(anony) * \param line 发生堆内存分配的源代码行号 * * \retutrn * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 * 分配失败,返回NULL。 * * \note * 当分配的内存不在使用时,必须调用heap_free是否分配的内存。 * * 参见 ANSI C 函数 malloc。 */ DSLIB_API void * heap_malloc (size_t size, const char * file, int line); /*! * \brief 堆内存分配, 且内存块被初始化0. * * \param num 内存块个数 * \param elm_size 每一个内存块的尺寸(字节) * \param file 指向发生堆内存分配的源代码文件名称,以null字符结尾。 * 如果等于NULL, 表示匿名源代码文件名(anony) * \param line 发生堆内存分配的源代码行号 * * \retutrn * 对内存分配成功的情况下,返回指向分配的内存的指针。如果内存 * 分配失败,返回NULL。 * * \note * 当分配的内存不在使用时,必须调用heap_free释放分配的内存。 * * 参见 ANSI C 函数 calloc。本函数与 calloc 不同之处在于不能 * 象calloc那样保证返回的堆内存块的其实地址对齐在elm_size边界 * 上。 */ DSLIB_API void * heap_calloc (size_t num, size_t elm_size, const char * file, int line); /*! * \brief 释放堆内存 * * \param mb 指向先前调用heap_alloc/heap_calloc分配的内存。 * * \return * 无。 */ DSLIB_API void heap_free (void * mb); /*! * \brief 报告堆内存分配 * * 调用本函数将堆内存分配情况以追加的方式输出到指定文件中。 * * \param fname 对内存分配报告将输出到该文件中。如果fname等于NULL, * 则报告将输出到标准输出上。 * * \retval -1 函数调用失败。 * \retval 0 函数调用成功。 */ DSLIB_API int heap_report (const char * fname); /* * 堆内存分配和释放宏定义, 为了方便使用者而提供这些宏定义。 * * 1. HEAP_MALLOC(_size) * 2. HEAP_CALLOC(_num, _elm_size) * 3. HEAP_FREE(_mb) */ #define HEAP_MALLOC(_size) heap_malloc((_size), __FILE__, __LINE__) #define HEAP_CALLOC(_num, _elm_size) heap_calloc((_num), (_elm_size), __FILE__, __LINE__) #define HEAP_FREE(_mb) do{if(_mb) {heap_free((_mb)); (_mb) = NULL;}} while(0) #ifdef DISABLE_OS_HEAP #undef HEAP_MALLOC #undef HEAP_CALLOC #undef HEAP_FREE #define HEAP_MALLOC(_size) malloc(_size) #define HEAP_CALLOC(_num, _elm_size) calloc(_num, _elm_size) #define HEAP_FREE(_mb) do {if (_mb) {free(_mb); (_mb) = NULL;}} while(0) #endif #endif /* __OS_HEAP_H_ASDFJLCXJVZXHCROEYUIODFGFMHFOIUHSDIHFZXKJCHGVLSDHFAJD */