You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.0 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/************************************************************************
*
* 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 */