/* memory allocationH_??? The hunk manages the entire memory block given to quake. It must becontiguous. Memory can be allocated from either the low or high end in astack fashion. The only way memory is released is by resetting one of thepointers.Hunk allocations should be given a name, so the Hunk_Print () functioncan display usage.Hunk allocations are guaranteed to be 16 byte aligned.The video buffers are allocated high to avoid leaving a hole underneathserver allocations when changing to a higher video mode.Z_??? Zone memory functions used for small, dynamic allocations like textstrings from command input. There is only about 48K for it, allocated atthe very bottom of the hunk.Cache_??? Cache memory is for objects that can be dynamically loaded andcan usefully stay persistant between levels. The size of the cachefluctuates from level to level.To allocate a cachable objectTemp_??? Temp memory is used for file loading and surface caching. The sizeof the cache memory is adjusted so that there is a minimum of 512k remainingfor temp memory.------ Top of Memory -------high hunk allocations<--- high hunk reset point held by vidvideo bufferz buffersurface cache<--- high hunk usedcachable memory<--- low hunk usedclient and server low hunk allocations<-- low hunk reset point held by hoststartup hunk allocationsZone block----- Bottom of Memory -----*/void Memory_Init (void *buf, int size);void Z_Free (void *ptr);void *Z_Malloc (int size); // returns 0 filled memoryvoid *Z_TagMalloc (int size, int tag);void Z_DumpHeap (void);void Z_CheckHeap (void);int Z_FreeMemory (void);void *Hunk_Alloc (int size); // returns 0 filled memoryvoid *Hunk_AllocName (int size, char *name);void *Hunk_HighAllocName (int size, char *name);int Hunk_LowMark (void);void Hunk_FreeToLowMark (int mark);int Hunk_HighMark (void);void Hunk_FreeToHighMark (int mark);void *Hunk_TempAlloc (int size);void Hunk_Check (void);typedef struct cache_user_s{ void *data;} cache_user_t;void Cache_Flush (void);void *Cache_Check (cache_user_t *c);// returns the cached data, and moves to the head of the LRU list// if present, otherwise returns NULLvoid Cache_Free (cache_user_t *c);void *Cache_Alloc (cache_user_t *c, int size, char *name);// Returns NULL if all purgable data was tossed and there still// wasn't enough room.void Cache_Report (void);
/*
memory allocation
H_??? The hunk manages the entire memory block given to quake. It must be
contiguous. Memory can be allocated from either the low or high end in a
stack fashion. The only way memory is released is by resetting one of the
pointers.
Hunk allocations should be given a name, so the Hunk_Print () function
can display usage.
Hunk allocations are guaranteed to be 16 byte aligned.
The video buffers are allocated high to avoid leaving a hole underneath
server allocations when changing to a higher video mode.
Z_??? Zone memory functions used for small, dynamic allocations like text
strings from command input. There is only about 48K for it, allocated at
the very bottom of the hunk.
Cache_??? Cache memory is for objects that can be dynamically loaded and
can usefully stay persistant between levels. The size of the cache
fluctuates from level to level.
To allocate a cachable object
Temp_??? Temp memory is used for file loading and surface caching. The size
of the cache memory is adjusted so that there is a minimum of 512k remaining
for temp memory.
------ Top of Memory -------
high hunk allocations
<--- high hunk reset point held by vid
video buffer
z buffer
surface cache
<--- high hunk used
cachable memory
<--- low hunk used
client and server low hunk allocations
<-- low hunk reset point held by host
startup hunk allocations
Zone block
----- Bottom of Memory -----
*/
void Memory_Init (void *buf, int size);
void Z_Free (void *ptr);
void *Z_Malloc (int size); // returns 0 filled memory
void *Z_TagMalloc (int size, int tag);
void Z_DumpHeap (void);
void Z_CheckHeap (void);
int Z_FreeMemory (void);
void *Hunk_Alloc (int size); // returns 0 filled memory
void *Hunk_AllocName (int size, char *name);
void *Hunk_HighAllocName (int size, char *name);
int Hunk_LowMark (void);
void Hunk_FreeToLowMark (int mark);
int Hunk_HighMark (void);
void Hunk_FreeToHighMark (int mark);
void *Hunk_TempAlloc (int size);
void Hunk_Check (void);
typedef struct cache_user_s
{
void *data;
} cache_user_t;
void Cache_Flush (void);
void *Cache_Check (cache_user_t *c);
// returns the cached data, and moves to the head of the LRU list
// if present, otherwise returns NULL
void Cache_Free (cache_user_t *c);
void *Cache_Alloc (cache_user_t *c, int size, char *name);
// Returns NULL if all purgable data was tossed and there still
// wasn't enough room.
void Cache_Report (void);