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/