Feature #10185
closed[PATCH] iseq: free untranslated iseq->iseq at compile
Description
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