comparison lphobos/std/gc.di @ 131:5825d48b27d1 trunk

[svn r135] * Merged DMD 1.025 * * Fixed a minor linking order mishap * * Added an command line option -annotate * * Fixed some problems with running optimizations * * Added std.stdio and dependencies to lphobos (still not 100% working, but compiles and links) * * Fixed problems with passing aggregate types to variadic functions * * Added initial code towards full GC support, currently based on malloc and friends, not all the runtime calls the GC yet for memory * * Fixed problems with resolving nested function context pointers for some heavily nested cases * * Redid function argument passing + other minor code cleanups, still lots to do on this end... *
author lindquist
date Fri, 04 Jan 2008 01:38:42 +0100
parents
children
comparison
equal deleted inserted replaced
130:a7dfa0ed966c 131:5825d48b27d1
1
2 /*
3 * Copyright (C) 1999-2006 by Digital Mars, www.digitalmars.com
4 * Written by Walter Bright
5 *
6 * This software is provided 'as-is', without any express or implied
7 * warranty. In no event will the authors be held liable for any damages
8 * arising from the use of this software.
9 *
10 * Permission is granted to anyone to use this software for any purpose,
11 * including commercial applications, and to alter it and redistribute it
12 * freely, subject to the following restrictions:
13 *
14 * o The origin of this software must not be misrepresented; you must not
15 * claim that you wrote the original software. If you use this software
16 * in a product, an acknowledgment in the product documentation would be
17 * appreciated but is not required.
18 * o Altered source versions must be plainly marked as such, and must not
19 * be misrepresented as being the original software.
20 * o This notice may not be removed or altered from any source
21 * distribution.
22 */
23
24
25 /**
26 * The garbage collector normally works behind the scenes without needing any
27 * specific interaction. These functions are for advanced applications that
28 * benefit from tuning the operation of the collector.
29 * Macros:
30 * WIKI=Phobos/StdGc
31 */
32
33 module std.gc;
34
35 import gcstats;
36
37 /**
38 * Add p to list of roots. Roots are references to memory allocated by the
39 collector that are maintained in memory outside the collector pool. The garbage
40 collector will by default look for roots in the stacks of each thread, the
41 registers, and the default static data segment. If roots are held elsewhere,
42 use addRoot() or addRange() to tell the collector not to free the memory it
43 points to.
44 */
45 void addRoot(void *p); // add p to list of roots
46
47 /**
48 * Remove p from list of roots.
49 */
50 void removeRoot(void *p); // remove p from list of roots
51
52 /**
53 * Add range to scan for roots.
54 */
55 void addRange(void *pbot, void *ptop); // add range to scan for roots
56
57 /**
58 * Remove range.
59 */
60 void removeRange(void *pbot); // remove range
61
62 /**
63 * Mark a gc allocated block of memory as possibly containing pointers.
64 */
65 void hasPointers(void* p);
66
67 /**
68 * Mark a gc allocated block of memory as definitely NOT containing pointers.
69 */
70 void hasNoPointers(void* p);
71
72 /**
73 * Mark a gc allocated block of memory pointed to by p as being populated with
74 * an array of TypeInfo ti (as many as will fit).
75 */
76 void setTypeInfo(TypeInfo ti, void* p);
77
78 /**
79 * Allocate nbytes of uninitialized data.
80 * The allocated memory will be scanned for pointers during
81 * a gc collection cycle, unless
82 * it is followed by a call to hasNoPointers().
83 */
84 void[] malloc(size_t nbytes);
85
86 /**
87 * Resize allocated memory block pointed to by p to be at least nbytes long.
88 * It will try to resize the memory block in place.
89 * If nbytes is 0, the memory block is free'd.
90 * If p is null, the memory block is allocated using malloc.
91 * The returned array may not be at the same location as the original
92 * memory block.
93 * The allocated memory will be scanned for pointers during
94 * a gc collection cycle, unless
95 * it is followed by a call to hasNoPointers().
96 */
97 void[] realloc(void* p, size_t nbytes);
98
99 /**
100 * Attempt to enlarge the memory block pointed to by p
101 * by at least minbytes beyond its current capacity,
102 * up to a maximum of maxbytes.
103 * Returns:
104 * 0 if could not extend p,
105 * total size of entire memory block if successful.
106 */
107 size_t extend(void* p, size_t minbytes, size_t maxbytes);
108
109 /**
110 * Returns capacity (size of the memory block) that p
111 * points to the beginning of.
112 * If p does not point into the gc memory pool, or does
113 * not point to the beginning of an allocated memory block,
114 * 0 is returned.
115 */
116 size_t capacity(void* p);
117
118 /**
119 * Set gc behavior to match that of 1.0.
120 */
121 void setV1_0();
122
123 /***********************************
124 * Run a full garbage collection cycle.
125 *
126 * The collector normally runs synchronously with a storage allocation request
127 (i.e. it never happens when in code that does not allocate memory). In some
128 circumstances, for example when a particular task is finished, it is convenient
129 to explicitly run the collector and free up all memory used by that task. It
130 can also be helpful to run a collection before starting a new task that would
131 be annoying if it ran a collection in the middle of that task. Explicitly
132 running a collection can also be done in a separate very low priority thread,
133 so that if the program is idly waiting for input, memory can be cleaned up.
134 */
135
136 void fullCollect();
137
138 /***********************************
139 * Run a generational garbage collection cycle.
140 * Takes less time than a fullcollect(), but isn't
141 * as effective.
142 */
143
144 void genCollect();
145
146 void genCollectNoStack();
147
148 /**
149 * Minimizes physical memory usage
150 */
151 void minimize();
152
153 /***************************************
154 * disable() temporarily disables garbage collection cycle, enable()
155 * then reenables them.
156 *
157 * This is used for brief time critical sections of code, so the amount of time
158 * it will take is predictable.
159 * If the collector runs out of memory while it is disabled, it will throw an
160 * std.outofmemory.OutOfMemoryException.
161 * The disable() function calls can be nested, but must be
162 * matched with corresponding enable() calls.
163 * By default collections are enabled.
164 */
165
166 void disable();
167
168 /**
169 * ditto
170 */
171 void enable();
172
173 void getStats(out GCStats stats);
174
175 /***************************************
176 * Get handle to the collector.
177 */
178
179 void* getGCHandle();
180
181 /***************************************
182 * Set handle to the collector.
183 */
184
185 void setGCHandle(void* p);
186
187 void endGCHandle();
188
189 extern (C)
190 {
191 void gc_init();
192 void gc_term();
193 }