#include "gencgc-alloc-region.h"
#include "genesis/code.h"
-#define PAGE_BYTES GENCGC_PAGE_SIZE
-
void gc_free_heap(void);
inline page_index_t find_page_index(void *);
inline void *page_address(page_index_t);
/* If the page is part of a large object then this flag is
* set. No other objects should be allocated to these pages.
* This is only valid when the page is allocated. */
- large_object :1;
+ large_object :1,
+ /* True if the page is known to contain only zeroes. */
+ need_to_zero :1;
/* the generation that this page belongs to. This should be valid
* for all pages that may have objects allocated, even current
/* values for the page.allocated field */
\f
-/* the number of pages needed for the dynamic space - rounding up */
-#define NUM_PAGES ((page_index_t) ((DYNAMIC_SPACE_SIZE+PAGE_BYTES-1)/PAGE_BYTES))
-
-extern struct page page_table[NUM_PAGES];
+extern unsigned page_table_pages;
+extern struct page *page_table;
\f
/* forward declarations */
page_index_t page_index=(void*)obj - (void *)DYNAMIC_SPACE_START;
return ((page_index >= 0)
&& ((page_index =
- ((unsigned long)page_index)/PAGE_BYTES) < NUM_PAGES)
+ ((unsigned long)page_index)/PAGE_BYTES) < page_table_pages)
&& (page_table[page_index].gen == space));
}