From: ko1@... Date: 2014-09-09T01:47:52+00:00 Subject: [ruby-core:64885] [ruby-trunk - Feature #10185] [PATCH] iseq: free untranslated iseq->iseq at compile Issue #10185 has been updated by Koichi Sasada. Koichi Sasada wrote: > - rename rb_iseq_untranslate_threaded_code to rb_iseq_decode_encoded_iseq() and fill iseq->iseq if iseq->iseq is not NULL. decode is also strange. const VALUE *rb_iseq_orignal_iseq() ? ---------------------------------------- Feature #10185: [PATCH] iseq: free untranslated iseq->iseq at compile https://bugs.ruby-lang.org/issues/10185#change-48746 * 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/