[前][次][番号順一覧][スレッド一覧]

ruby-changes:4502

From: ko1@a...
Date: Mon, 14 Apr 2008 12:47:18 +0900 (JST)
Subject: [ruby-changes:4502] nobu - Ruby:r15995 (trunk): * gc.c (rb_objspace_t): packed globals.

nobu	2008-04-14 12:47:04 +0900 (Mon, 14 Apr 2008)

  New Revision: 15995

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

  Log:
    * gc.c (rb_objspace_t): packed globals.  [ruby-dev:34348]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15995&r2=15994&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=15995&r2=15994&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15994)
+++ ChangeLog	(revision 15995)
@@ -1,5 +1,7 @@
-Mon Apr 14 12:44:13 2008  Nobuyoshi Nakada  <nobu@r...>
+Mon Apr 14 12:47:02 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* gc.c (rb_objspace_t): packed globals.  [ruby-dev:34348]
+
 	* gc.c (finalizers): removed.  [ruby-dev:34349]
 
 Mon Apr 14 00:51:40 2008  Yusuke Endoh  <mame@t...>
Index: gc.c
===================================================================
--- gc.c	(revision 15994)
+++ gc.c	(revision 15995)
@@ -84,19 +84,9 @@
 #endif
 #endif
 
-static unsigned long malloc_increase = 0;
-static unsigned long malloc_limit = GC_MALLOC_LIMIT;
 static VALUE nomem_error;
 
-static int dont_gc;
-static int during_gc;
-static int need_call_final = 0;
-static st_table *finalizer_table = 0;
-
 #define MARK_STACK_MAX 1024
-static VALUE mark_stack[MARK_STACK_MAX];
-static VALUE *mark_stack_ptr;
-static int mark_stack_overflow;
 
 int ruby_gc_debug_indent = 0;
 
@@ -139,25 +129,84 @@
 #pragma pack(pop)
 #endif
 
-static RVALUE *freelist = 0;
-static RVALUE *deferred_final_list = 0;
-
 #define HEAPS_INCREMENT 10
-static struct heaps_slot {
+struct heaps_slot {
     void *membase;
     RVALUE *slot;
     int limit;
-} *heaps;
-static int heaps_length = 0;
-static int heaps_used   = 0;
+};
 
 #define HEAP_MIN_SLOTS 10000
-static int heap_slots = HEAP_MIN_SLOTS;
-
 #define FREE_MIN  4096
 
-static RVALUE *himem, *lomem;
+struct gc_list {
+    VALUE *varptr;
+    struct gc_list *next;
+};
 
+typedef struct {
+    struct {
+	unsigned long limit;
+	unsigned long increase;
+    } params;
+    struct {
+	int slots;
+	struct heaps_slot *ptr;
+	int length;
+	int used;
+	RVALUE *freelist;
+	RVALUE *range[2];
+    } heap;
+    struct {
+	int dont_gc;
+	int during_gc;
+    } flags;
+    struct {
+	int need_call;
+	st_table *table;
+	RVALUE *deferred;
+    } final;
+    struct {
+	VALUE buffer[MARK_STACK_MAX];
+	VALUE *ptr;
+	int overflow;
+    } markstack;
+    struct gc_list *global_list;
+} rb_objspace_t;
+
+static rb_objspace_t rb_objspace = {{GC_MALLOC_LIMIT}, {HEAP_MIN_SLOTS}};
+/* #define objspace GET_VM()->objspace */
+#define malloc_limit		objspace->params.limit
+#define malloc_increase 	objspace->params.increase
+#define heap_slots		objspace->heap.slots
+#define heaps			objspace->heap.ptr
+#define heaps_length		objspace->heap.length
+#define heaps_used		objspace->heap.used
+#define freelist		objspace->heap.freelist
+#define lomem			objspace->heap.range[0]
+#define himem			objspace->heap.range[1]
+#define dont_gc 		objspace->flags.dont_gc
+#define during_gc		objspace->flags.during_gc
+#define need_call_final 	objspace->final.need_call
+#define finalizer_table 	objspace->final.table
+#define deferred_final_list	objspace->final.deferred
+#define mark_stack		objspace->markstack.buffer
+#define mark_stack_ptr		objspace->markstack.ptr
+#define mark_stack_overflow	objspace->markstack.overflow
+#define global_List		objspace->global_list
+
+rb_objspace_t *
+rb_objspace_alloc(void)
+{
+    rb_objspace_t *objspace = ALLOC(rb_objspace_t);
+    memset(objspace, 0, sizeof(*objspace));
+    malloc_limit = GC_MALLOC_LIMIT;
+    heap_slots = HEAP_MIN_SLOTS;
+    return objspace;
+}
+
+#define objspace (&rb_objspace)
+
 extern st_table *rb_class_tbl;
 VALUE *rb_gc_stack_start = 0;
 #ifdef __ia64
@@ -371,11 +420,6 @@
 
 VALUE rb_mGC;
 
-static struct gc_list {
-    VALUE *varptr;
-    struct gc_list *next;
-} *global_List = 0;
-
 void
 rb_gc_register_address(VALUE *addr)
 {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]