00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __MEMORY_H
00025 #define __MEMORY_H
00026
00027
00028
00029
00030
00031
00032
00033 #include "debug.h"
00034
00035
00036
00037 #ifdef MEM_OVER
00038 #ifdef MEM_MACRO
00039 #error "Cannot use macro and over mode at the same time"
00040 #endif
00041 #endif
00042
00043
00044 #ifdef MEM_VERBOSE
00045 #if !defined (MEM_OVER)
00046 #error "Cannot use verbose mode without over mode"
00047 #endif
00048 #endif
00049
00050 #ifdef MEM_MACRO
00051
00052 #include <stdio.h>
00053 #include <stdlib.h>
00054
00055 #define mem_malloc(s) malloc((size_t)s)
00056 #define mem_calloc(n,s) calloc(n,(size_t)s)
00057 #define mem_free(p) free(p)
00058 #define mem_trace_checkpoint()
00059 #define mem_trace_report()
00060
00061 #else
00062
00063 #ifdef MEM_OVER
00064 #ifndef INMEM
00065 #define mem_malloc(s) mem_malloc_over(s,__FILE__,__FUNCTION__,__LINE__)
00066 #define mem_calloc(n,s) mem_calloc_over(n,s,__FILE__,__FUNCTION__,__LINE__)
00067 #define mem_free(p) mem_free_over(p,__FILE__,__FUNCTION__,__LINE__)
00068 #endif
00069 void *mem_malloc_over(size_t size, char *file, char *func, int line);
00070 void *mem_calloc_over(size_t nmemb, size_t size, char *file, char *func, int line);
00071 void mem_free_over(void *ptr, char *file, char *func, int line);
00072 #else
00073 void *mem_malloc(size_t size);
00074 void *mem_calloc(size_t nmemb, size_t size);
00075 void *mem_realloc(void *ptr, size_t size);
00076 void mem_free(void *ptr);
00077 #endif
00078
00079 #define mem_trace_checkpoint()
00080 void mem_trace_report(void);
00081
00082 #endif
00083
00084 #endif