Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5131 | clevermous | 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 |