00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00036 #ifndef _zalloc_h_
00037 #define _zalloc_h_
00038
00039 #include <glib.h>
00040
00041 #define ZALLOC_ALIGNBYTES MEM_ALIGNBYTES
00042
00043
00044
00045
00046 #define ZALLOC_MASK (ZALLOC_ALIGNBYTES - 1)
00047 #define zalloc_round(s) \
00048 ((gulong) (((gulong) (s) + ZALLOC_MASK) & ~ZALLOC_MASK))
00049
00061 struct subzone;
00062
00063 typedef struct zone {
00064 gchar **zn_free;
00065 struct subzone *zn_next;
00066 gpointer zn_arena;
00067 gint zn_refcnt;
00068 gint zn_size;
00069 gint zn_hint;
00070 gint zn_cnt;
00071 } zone_t;
00072
00073 #define zcount(z) ((z)->zn_cnt)
00075
00076
00077
00078
00079 zone_t *zcreate(gint, gint);
00080 zone_t *zget(gint, gint);
00081 void zdestroy(zone_t *zone);
00082
00083
00084
00085
00086
00087
00088 #if defined(USE_DMALLOC) && !defined(REMAP_ZALLOC)
00089 #define REMAP_ZALLOC
00090 #endif
00091
00092 #ifdef REMAP_ZALLOC
00093
00094 #ifdef TRACK_ZALLOC
00095 #error "TRACK_ZALLOC and REMAP_ZALLOC are mutually exclusive"
00096 #endif
00097
00098 #define zalloc(z) g_malloc((z)->zn_size)
00099 #define zfree(z,o) g_free(o)
00100
00101 #else
00102
00103 gpointer zalloc(zone_t *);
00104 void zfree(zone_t *, gpointer);
00105
00106 #endif
00107
00108 #ifdef TRACK_ZALLOC
00109
00110 #define zalloc(z) zalloc_track(z, __FILE__, __LINE__)
00111
00112 gpointer zalloc_track(zone_t *z, gchar *file, gint line);
00113
00114 #endif
00115
00116 #endif
00117