[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-cvs
Subject:    [ruby-cvs:72549] ko1:r65449 (trunk): introduce TransientHeap. [Bug #14858]
From:       ko1 () ruby-lang ! org
Date:       2018-10-30 21:53:57
Message-ID: 20181030215357.37A986EF2B () svn ! ruby-lang ! org
[Download RAW message or body]

ko1	2018-10-31 06:53:56 +0900 (Wed, 31 Oct 2018)

  New Revision: 65449

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65449

  Log:
    introduce TransientHeap. [Bug #14858]
    
    * transient_heap.c, transient_heap.h: implement TransientHeap (theap).
      theap is designed for Ruby's object system. theap is like Eden heap
      on generational GC terminology. theap allocation is very fast because
      it only needs to bump up pointer and deallocation is also fast because
      we don't do anything. However we need to evacuate (Copy GC terminology)
      if theap memory is long-lived. Evacuation logic is needed for each type.
    
      See [Bug #14858] for details.
    
    * array.c: Now, theap for T_ARRAY is supported.
    
      ary_heap_alloc() tries to allocate memory area from theap. If this trial
      sccesses, this array has theap ptr and RARRAY_TRANSIENT_FLAG is turned on.
      We don't need to free theap ptr.
    
    * ruby.h: RARRAY_CONST_PTR() returns malloc'ed memory area. It menas that
      if ary is allocated at theap, force evacuation to malloc'ed memory.
      It makes programs slow, but very compatible with current code because
      theap memory can be evacuated (theap memory will be recycled).
    
      If you want to get transient heap ptr, use RARRAY_CONST_PTR_TRANSIENT()
      instead of RARRAY_CONST_PTR(). If you can't understand when evacuation
      will occur, use RARRAY_CONST_PTR().
    
    (re-commit of r65444)

  Added files:
    trunk/transient_heap.c
    trunk/transient_heap.h
  Modified files:
    trunk/array.c
    trunk/common.mk
    trunk/compile.c
    trunk/debug_counter.h
    trunk/enum.c
    trunk/gc.c
    trunk/include/ruby/ruby.h
    trunk/inits.c
    trunk/insns.def
    trunk/internal.h
    trunk/string.c
    trunk/test/ruby/test_enum.rb
    trunk/vm_args.c
    trunk/vm_eval.c
    trunk/vm_insnhelper.c
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic