+/** First free position in the active heap. */
+char *gc_allocation_pointer;
+
+/** Position of objects copied but not yet visited (during GC collect). */
+char *gc_scavenging_pointer;
+
+/** List of global objects. */
+GC_List staticObjects;
+
+/** Size of a memory page. Used to grow or shrink the GC heap. */
+unsigned long page_size;
+
+/* Markbit manipulations */
+#define GET_MARKBIT(x) (((val_t)((x)[0].vft)) & 1)
+#define SET_MARKBIT(x) ((x)->vft = (void*)(((bigint)((x)->vft)) | 1))
+#define REMOVE_MARKBIT(x) ((x) ^ 1)
+
+void Nit_gc_init(void) {
+ page_size = sysconf(_SC_PAGESIZE);
+
+ gc_heap_pointer = calloc(1, page_size);
+ if (gc_heap_pointer==NULL) exit(1);
+ gc_heap_size = page_size;
+ gc_used_size = 0;
+
+ gc_allocation_pointer = gc_heap_pointer;
+
+ gc_old_heap_pointer = NULL;
+ gc_scavenging_pointer = NULL;