ruby-changes:4879
From: ko1@a...
Date: Mon, 12 May 2008 11:16:02 +0900 (JST)
Subject: [ruby-changes:4879] yugui - Ruby:r16372 (trunk): * gc.c (assign_heap_slot): put the binary-search routine in order.
yugui 2008-05-12 11:15:55 +0900 (Mon, 12 May 2008) New Revision: 16372 Modified files: trunk/gc.c Log: * gc.c (assign_heap_slot): put the binary-search routine in order. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=16372&r2=16371&diff_format=u Index: gc.c =================================================================== --- gc.c (revision 16371) +++ gc.c (revision 16372) @@ -548,32 +548,31 @@ if (p == 0) rb_memerror(); + membase = p; + if ((VALUE)p % sizeof(RVALUE) != 0) { + p = (RVALUE*)((VALUE)p + sizeof(RVALUE) - ((VALUE)p % sizeof(RVALUE))); + if ((membase + HEAP_SIZE) < (p + HEAP_SIZE)) { + objs--; + } + } + + lo = 0; hi = heaps_used; while (lo < hi) { + register RVALUE *mid_membase; mid = (lo + hi) / 2; - membase = heaps[mid].membase; - if (membase < p) { + mid_membase = heaps[mid].membase; + if (mid_membase < membase) { lo = mid + 1; } - else if (membase > p) { + else if (mid_membase > membase) { hi = mid; } else { - rb_bug("same heap slot is allocated: %p at %ld", p, mid); + rb_bug("same heap slot is allocated: %p at %ld", membase, mid); } } - - membase = p; - - if ((VALUE)p % sizeof(RVALUE) != 0) { - p = (RVALUE*)((VALUE)p + sizeof(RVALUE) - ((VALUE)p % sizeof(RVALUE))); - if ((membase + HEAP_SIZE) < (p + HEAP_SIZE)) { - objs--; - } - } - - if (hi < heaps_used) { MEMMOVE(&heaps[hi+1], &heaps[hi], struct heaps_slot, heaps_used - hi); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/