From: normalperson@... Date: 2014-08-30T01:42:16+00:00 Subject: [ruby-core:64665] [ruby-trunk - Feature #10187] [Open] minor iseq memory reductions Issue #10187 has been reported by Eric Wong. ---------------------------------------- Feature #10187: minor iseq memory reductions https://bugs.ruby-lang.org/issues/10187 * Author: Eric Wong * Status: Open * Priority: Low * Assignee: Eric Wong * Category: core * Target version: current: 2.2.0 ---------------------------------------- Pretty trivial and low impact, but I figure we might as well reduce memory footprint a few kilobytes where we can and let the reductions accumulate. Feature #10185 has much bigger impact. * [PATCH 1/2] iseq_inline_storage_entry: 24=>16 bytes on x86-64 We may tag the running_thread pointer to avoid making the "once" struct bigger than "struct iseq_inline_cache_entry". This only saves a small amount with "valgrind ruby -e exit" before: total heap usage: 48,122 allocs, 19,248 frees, 8,110,149 bytes allocated after: total heap usage: 48,122 allocs, 19,253 frees, 8,099,197 bytes allocated * [PATCH 2/2] rb_call_info_t: 104=>96 bytes on x86-64 This keeps ci->flag and ci->aux.index consistent across 32-bit and 64-bit platforms. ci->flag: VM_CALL_* flags only use 9 bits, currently ci->aux.index: 2 billion ivars per class should be enough for anybody This saves around 50K allocations on "valgrind ruby -e exit" before: total heap usage: 48,122 allocs, 19,253 frees, 8,099,197 bytes allocated after: total heap usage: 48,069 allocs, 19,214 frees, 8,047,266 bytes allocated ---Files-------------------------------- inline_storage-16.patch (2.45 KB) -- https://bugs.ruby-lang.org/