From: normalperson@... Date: 2014-07-13T08:42:17+00:00 Subject: [ruby-core:63685] [ruby-trunk - Feature #10030] [PATCH] reduce rb_iseq_struct to 296 bytes Issue #10030 has been updated by Eric Wong. ko1@atdot.net wrote: > From what size on which architecture? x86-64 > On the code: > > (1) _catch_table should be catch_table OK, I will change it back. I renamed it so it'd be easier for the compiler to detect places where I need to change code. > (2) I don't like iseq_catch_table_each() macro. > I like to write like > ``` > if (iseq->_catch_table) for (i=0; i_catch_table->size; i++) {..} > ``` OK, I didn't want to increase line length or change indentation of existing code. How about using a iseq_catch_table_size macro instead: ``` #define iseq_catch_table_size(iseq) \ (iseq->catch_table ? iseq->catch_table->size : 0) for (i = 0; i < iseq_catch_table_size(iseq); i++) { ... } ``` ---------------------------------------- Feature #10030: [PATCH] reduce rb_iseq_struct to 296 bytes https://bugs.ruby-lang.org/issues/10030#change-47737 * Author: Eric Wong * Status: Open * Priority: Low * Assignee: Koichi Sasada * Category: core * Target version: current: 2.2.0 ---------------------------------------- This probably breaks ruby2cext; but I'm not sure if anybody uses that. May we remove rb_iseq_build_for_ruby2cext? I will probably have more patches along these lines to reduce iseq-related allocations. This is probably the most obvious, aside from ruby2cext compatibility. Most iseq do not have a catch_table, so avoid needlessly adding 4-8 bytes to the struct for the common case. * iseq.h (struct iseq_catch_table): new flexible array struct (iseq_catch_table_each): new iterator macro (iseq_catch_table_bytes): new size macro * vm_core.h (struct rb_iseq_struct): use _catch_table member * compile.c (iseq_set_exception_table): update for struct changes * iseq.c (iseq_free): ditto * iseq.c (iseq_memsize): ditto * iseq.c (rb_iseq_disasm): ditto * iseq.c (iseq_data_to_ary): ditto * iseq.c (rb_iseq_build_for_ruby2cext): ditto (untested) * vm.c (vm_exec): ditto * vm_core.h (struct rb_iseq_struct): ditto * vm_insnhelper.c (vm_throw): ditto ---Files-------------------------------- iseq_catch_table_flex.patch (8.94 KB) -- https://bugs.ruby-lang.org/