|
|
1.1 root 1: /*
2: Copyright (C) 1996-1997 Id Software, Inc.
3:
4: This program is free software; you can redistribute it and/or
5: modify it under the terms of the GNU General Public License
6: as published by the Free Software Foundation; either version 2
7: of the License, or (at your option) any later version.
8:
9: This program is distributed in the hope that it will be useful,
10: but WITHOUT ANY WARRANTY; without even the implied warranty of
11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12:
13: See the GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; if not, write to the Free Software
17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18:
19: */
20: /*
21: memory allocation
22:
23:
24: H_??? The hunk manages the entire memory block given to quake. It must be
25: contiguous. Memory can be allocated from either the low or high end in a
26: stack fashion. The only way memory is released is by resetting one of the
27: pointers.
28:
29: Hunk allocations should be given a name, so the Hunk_Print () function
30: can display usage.
31:
32: Hunk allocations are guaranteed to be 16 byte aligned.
33:
34: The video buffers are allocated high to avoid leaving a hole underneath
35: server allocations when changing to a higher video mode.
36:
37:
38: Z_??? Zone memory functions used for small, dynamic allocations like text
39: strings from command input. There is only about 48K for it, allocated at
40: the very bottom of the hunk.
41:
42: Cache_??? Cache memory is for objects that can be dynamically loaded and
43: can usefully stay persistant between levels. The size of the cache
44: fluctuates from level to level.
45:
46: To allocate a cachable object
47:
48:
49: Temp_??? Temp memory is used for file loading and surface caching. The size
50: of the cache memory is adjusted so that there is a minimum of 512k remaining
51: for temp memory.
52:
53:
54: ------ Top of Memory -------
55:
56: high hunk allocations
57:
58: <--- high hunk reset point held by vid
59:
60: video buffer
61:
62: z buffer
63:
64: surface cache
65:
66: <--- high hunk used
67:
68: cachable memory
69:
70: <--- low hunk used
71:
72: client and server low hunk allocations
73:
74: <-- low hunk reset point held by host
75:
76: startup hunk allocations
77:
78: Zone block
79:
80: ----- Bottom of Memory -----
81:
82:
83:
84: */
85:
86: void Memory_Init (void *buf, int size);
87:
88: void Z_Free (void *ptr);
89: void *Z_Malloc (int size); // returns 0 filled memory
90: void *Z_TagMalloc (int size, int tag);
91:
92: void Z_DumpHeap (void);
93: void Z_CheckHeap (void);
94: int Z_FreeMemory (void);
95:
96: void *Hunk_Alloc (int size); // returns 0 filled memory
97: void *Hunk_AllocName (int size, char *name);
98:
99: void *Hunk_HighAllocName (int size, char *name);
100:
101: int Hunk_LowMark (void);
102: void Hunk_FreeToLowMark (int mark);
103:
104: int Hunk_HighMark (void);
105: void Hunk_FreeToHighMark (int mark);
106:
107: void *Hunk_TempAlloc (int size);
108:
109: void Hunk_Check (void);
110:
111: typedef struct cache_user_s
112: {
113: void *data;
114: } cache_user_t;
115:
116: void Cache_Flush (void);
117:
118: void *Cache_Check (cache_user_t *c);
119: // returns the cached data, and moves to the head of the LRU list
120: // if present, otherwise returns NULL
121:
122: void Cache_Free (cache_user_t *c);
123:
124: void *Cache_Alloc (cache_user_t *c, int size, char *name);
125: // Returns NULL if all purgable data was tossed and there still
126: // wasn't enough room.
127:
128: void Cache_Report (void);
129:
130:
131:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.