File indexing completed on 2025-01-18 10:02:04
0001 #ifndef MAD_MEM_H
0002 #define MAD_MEM_H
0003
0004 #ifdef _USEGC
0005
0006
0007
0008 #include <gc.h>
0009
0010 #define mymalloc(fn, sz) mytrace(sz,myptrchk(fn, GC_MALLOC_IGNORE_OFF_PAGE(sz)))
0011 #define mymalloc_atomic(fn, sz) mytrace(sz,myptrchk(fn, GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(sz)))
0012 #define myrealloc(fn, p, sz) mytrace(sz,myptrchk(fn, GC_REALLOC((p),(sz))))
0013 #define myfree(fn, p) ((void)(GC_FREE(p), (void)fn, (p)=0))
0014
0015 #define mycalloc(fn, n, sz) memset(mymalloc(fn, (n)*(sz)), 0, (n)*(sz))
0016 #define mycalloc_atomic(fn, n, sz) memset(mymalloc_atomic(fn, (n)*(sz)), 0, (n)*(sz))
0017 #define myrecalloc(fn, p, osz, sz) ((void*)((char*)memset((char*)myptrchk(fn,GC_REALLOC((p),(sz)))+(osz),0,(sz)-(osz))-(osz)))
0018
0019 #define mycollect() GC_gcollect()
0020
0021 #else
0022
0023 #define mymalloc(fn, sz) mytrace(sz,myptrchk(fn, malloc(sz)))
0024 #define mymalloc_atomic(fn, sz) mytrace(sz,myptrchk(fn, malloc(sz)))
0025 #define myrealloc(fn, p, sz) mytrace(sz,myptrchk(fn, realloc((p),(sz))))
0026 #define myfree(fn, p) ((void)(free(p), (void)fn, (p)=0))
0027
0028 #define mycalloc(fn, n, sz) mytrace(sz,myptrchk(fn, calloc((n),(sz))))
0029 #define mycalloc_atomic(fn, n, sz) mytrace(sz,myptrchk(fn, calloc((n),(sz))))
0030 #define myrecalloc(fn, p, osz, sz) ((void*)((char*)memset((char*)myptrchk(fn,realloc((p),(sz)))+(osz),0,(sz)-(osz))-(osz)))
0031
0032 #define mycollect()
0033
0034 #endif
0035
0036 #ifdef DEBUG_MEM
0037 #define mytrace_limit 100000
0038 #define mytrace(sz,expr) ((sz)>mytrace_limit && fprintf(stderr, "mytrace:%s:%d: %ld\n", __FILE__, __LINE__, (long)(sz)),(expr))
0039 #else
0040 #define mytrace(sz,expr) (expr)
0041 #endif
0042
0043
0044 void mad_mem_handler(int sig);
0045
0046
0047 void* myptrchk(const char *caller, void *ptr);
0048
0049 #endif