Issue #10185 has been updated by Eric Wong.


 > https://bugs.ruby-lang.org/issues/10185#change-48562
 > 
 > ---Files--------------------------------
 > iseq-tc-diet.patch (4.43 KB)
 > iseq-iseq-diet.patch (9.54 KB)
 
 Ping?  I hope to commit these two soon.

----------------------------------------
Feature #10185: [PATCH] iseq: free untranslated iseq->iseq at compile
https://bugs.ruby-lang.org/issues/10185#change-48740

* Author: Eric Wong
* Status: Open
* Priority: Normal
* Assignee: Eric Wong
* Category: core
* Target version: current: 2.2.0
----------------------------------------
running "ruby -rpp -e 'pp GC.stat'", a reduction in
malloc usage is shown:

before:
	:malloc_increase=>118784,
	:oldmalloc_increase=>1178736,

after:
	:malloc_increase=>99832,
	:oldmalloc_increase=>1031976,

(numbers from x86-64)

* compile.c (rb_iseq_translate_threaded_code): free iseq->iseq
  (rb_vm_addr2insn): new function for debug
  (rb_iseq_untranslate_threaded_code): ditto

* iseq.c (iseq_memsize): support iseq->iseq == 0
  (rb_iseq_disasm): untranslate for dump
  (iseq_data_to_ary): ditto
  (rb_iseq_line_trace_each): ditto

* vm_dump.c (rb_vmdebug_debug_print_pre): ditto


I think we can remove iseq->iseq field from the rb_iseq_t structure in
the future and use transient allocation for the debug functions.
rb_iseq_untranslate_threaded_code is an uncommon code path for debug and
not a performance issue in normal code.


---Files--------------------------------
iseq-tc-diet.patch (4.43 KB)
iseq-iseq-diet.patch (9.54 KB)


-- 
https://bugs.ruby-lang.org/