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)
StgTSO * threads; // threads in this gen
// linked via global_link
unsigned int n_old_blocks; // number of blocks in from-space
unsigned int live_estimate; // for sweeping: estimate of live data
- bdescr * saved_mut_list;
-
bdescr * part_blocks; // partially-full scanned blocks
unsigned int n_part_blocks; // count of above
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
INLINE_HEADER void initBdescr(bdescr *bd, generation *gen, generation *dest)
{
- bd->gen = gen;
- bd->gen_no = gen->no;
- bd->dest = dest;
+ bd->gen = gen;
+ bd->gen_no = gen->no;
+ bd->dest_no = dest->no;
}
#endif /* RTS_STORAGE_GC_H */