bdescr * blocks; // blocks in this gen
unsigned int n_blocks; // number of blocks
- unsigned int n_words; // number of words
+ unsigned int n_words; // number of used words
bdescr * large_objects; // large objects (doubly linked)
unsigned int n_large_blocks; // no. of blocks used by large objs
- unsigned int n_new_large_blocks; // count freshly allocated large objects
+ unsigned long n_new_large_words; // words of new large objects
+ // (for allocation stats)
unsigned int max_blocks; // max blocks
bdescr *mut_list; // mut objects in this gen (not G0)
void freeExec (void *p);
// Used by GC checks in external .cmm code:
-extern nat alloc_blocks_lim;
+extern nat large_alloc_lim;
/* -----------------------------------------------------------------------------
Performing Garbage Collection
void setKeepCAFs (void);
/* -----------------------------------------------------------------------------
+ Stats
+ -------------------------------------------------------------------------- */
+
+// Returns the total number of bytes allocated since the start of the program.
+HsInt64 getAllocations (void);
+
+/* -----------------------------------------------------------------------------
This is the write barrier for MUT_VARs, a.k.a. IORefs. A
MUT_VAR_CLEAN object is not on the mutable list; a MUT_VAR_DIRTY
is. When written to, a MUT_VAR_CLEAN turns into a MUT_VAR_DIRTY