You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
/*****************************************************************************
|
|
*
|
|
* mem.h
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Arenas
|
|
*
|
|
* Memory is allocated in chunks called arenas. Arenas contain extra
|
|
* bookkeeping in DEBUG to help catch common memory problems like
|
|
* overruns and memory leaks. (It doesn't catch dangling pointers,
|
|
* though.)
|
|
*
|
|
*****************************************************************************/
|
|
|
|
typedef unsigned TM; /* Artificial time */
|
|
|
|
typedef struct ARENA AR, *PAR;
|
|
|
|
struct ARENA {
|
|
#ifdef DEBUG
|
|
PAR parNext; /* Next arena */
|
|
PAR parPrev; /* Previous arena */
|
|
CB cb; /* Size of rgb */
|
|
TM tm; /* Timestamp used to track memory leaks */
|
|
#endif
|
|
BYTE rgb[4]; /* The actual data */
|
|
};
|
|
|
|
typedef CONST AR *PCAR;
|
|
|
|
#define parPv(pv) pvSubPvCb(pv, offsetof(AR, rgb))
|
|
|
|
#ifdef DEBUG
|
|
extern TM g_tmNow;
|
|
extern AR g_arHead;
|
|
#define parHead (&g_arHead)
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
void STDCALL AssertPar(PCAR par);
|
|
#else
|
|
#define AssertPar(par)
|
|
#endif
|
|
void STDCALL FreePv(PVOID pv);
|
|
PVOID STDCALL pvAllocCb(CB cb);
|
|
PVOID STDCALL pvReallocPvCb(PVOID pv, CB cb);
|
|
|
|
INLINE PTCH STDCALL
|
|
ptchAllocCtch(CTCH ctch)
|
|
{
|
|
return pvAllocCb(cbCtch(ctch));
|
|
}
|
|
|
|
INLINE PTCH STDCALL
|
|
ptchReallocPtchCtch(PTCH ptch, CTCH ctch)
|
|
{
|
|
return pvReallocPvCb(ptch, cbCtch(ctch));
|
|
}
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Garbage collection
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifdef DEBUG
|
|
void STDCALL Gc(void);
|
|
#else
|
|
#define Gc()
|
|
#endif
|