123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- Copyright (C) 1996-1997 Id Software, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- /*
- 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);
|