blob: 249e0cf6160752c3affb1ac9c7af663a51d35b57 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/* ----------------------------------------------------------------------------
*
* (c) The GHC Team 1998-2006
*
* Generational garbage collector: utilities
*
* Documentation on the architecture of the Garbage Collector can be
* found in the online commentary:
*
* http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC
*
* --------------------------------------------------------------------------*/
#include "SMP.h"
bdescr *allocBlock_sync(void);
void freeChain_sync(bdescr *bd);
void push_scanned_block (bdescr *bd, step_workspace *ws);
bdescr *grab_todo_block (step_workspace *ws);
StgPtr todo_block_full (nat size, step_workspace *ws);
StgPtr alloc_todo_block (step_workspace *ws, nat size);
// Returns true if a block is partially full. This predicate is used to try
// to re-use partial blocks wherever possible, and to reduce wastage.
// We might need to tweak the actual value.
INLINE_HEADER rtsBool
isPartiallyFull(bdescr *bd)
{
return (bd->free + WORK_UNIT_WORDS < bd->start + BLOCK_SIZE_W);
}
#if DEBUG
void printMutableList (generation *gen);
#endif
|