Files
ldc/dmd2/root/gc.h
Alexey Prokhin b52c224d57 Merge v2.056
2011-11-01 11:44:03 +04:00

69 lines
1.9 KiB
C

// Copyright (c) 2000-2011 by Digital Mars
// All Rights Reserved
// written by Walter Bright
// http://www.digitalmars.com
// License for redistribution is by either the Artistic License
// in artistic.txt, or the GNU General Public License in gnu.txt.
// See the included readme.txt for details.
#ifndef GC_H
#define GC_H
struct Gcx; // private data
typedef void (*GC_FINALIZER)(void *p, void *dummy);
struct GCStats
{
unsigned poolsize; // total size of pool
unsigned usedsize; // bytes allocated
unsigned freeblocks; // number of blocks marked FREE
unsigned freelistsize; // total of memory on free lists
unsigned pageblocks; // number of blocks marked PAGE
};
struct GC
{
// For passing to debug code
static unsigned line;
static char *file;
// #define GC_LOG() ((GC::line = __LINE__), (GC::file = __FILE__))
#define GC_LOG() ((void)0)
Gcx *gcx; // implementation
~GC();
void init();
char *strdup(const char *s);
void *malloc(size_t size);
void *malloc_atomic(size_t size);
void *calloc(size_t size, size_t n);
void *realloc(void *p, size_t size);
void free(void *p);
void *mallocdup(void *o, size_t size);
void check(void *p);
void error();
void setStackBottom(void *p);
void addRoot(void *p); // add p to list of roots
void removeRoot(void *p); // remove p from list of roots
void addRange(void *pbot, void *ptop); // add range to scan for roots
void removeRange(void *pbot); // remove range
void fullcollect(); // do full garbage collection
void fullcollectNoStack(); // do full garbage collection; no scan stack
void gencollect(); // do generational garbage collection
void minimize(); // minimize physical memory usage
void setFinalizer(void *p, GC_FINALIZER pFn);
void getStats(GCStats *stats);
};
#endif