projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2002-11-07 14:42:25 by simonmar]
[ghc-hetmet.git]
/
ghc
/
rts
/
Arena.c
diff --git
a/ghc/rts/Arena.c
b/ghc/rts/Arena.c
index
f719400
..
cc18e4e
100644
(file)
--- a/
ghc/rts/Arena.c
+++ b/
ghc/rts/Arena.c
@@
-1,5
+1,5
@@
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- $Id: Arena.c,v 1.1 2001/10/18 14:41:01 simonmar Exp $
+ $Id: Arena.c,v 1.4 2002/07/28 02:31:11 sof Exp $
(c) The University of Glasgow 2001
Arena allocation. Arenas provide fast memory allocation at the
(c) The University of Glasgow 2001
Arena allocation. Arenas provide fast memory allocation at the
@@
-19,6
+19,7
@@
which most allocations are small.
-------------------------------------------------------------------------- */
which most allocations are small.
-------------------------------------------------------------------------- */
+#include <stdlib.h>
#include "Rts.h"
#include "RtsUtils.h"
#include "BlockAlloc.h"
#include "Rts.h"
#include "RtsUtils.h"
#include "BlockAlloc.h"
@@
-60,8
+61,12
@@
arenaAlloc( Arena *arena, size_t size )
nat req_blocks;
bdescr *bd;
nat req_blocks;
bdescr *bd;
- // round up to word size...
- size_w = (size + sizeof(W_) - 1) / sizeof(W_);
+// The minimum alignment of an allocated block.
+#define MIN_ALIGN 8
+
+ // size of allocated block in words, rounded up to the nearest
+ // alignment chunk.
+ size_w = ((size + MIN_ALIGN - 1) / MIN_ALIGN) * (MIN_ALIGN/sizeof(W_));
if ( arena->free + size_w < arena->lim ) {
// enough room in the current block...
if ( arena->free + size_w < arena->lim ) {
// enough room in the current block...