From b5de76e22ba9f07ae7ea0c63a231f06b51c3f803 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 6 Feb 2011 06:09:19 +0000 Subject: avoid unnecessary rb_intern() calls Micro-optimization :P Oh well ERB makes it easy --- ext/mall/mall.c.erb | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ext/mall/mall.c.erb b/ext/mall/mall.c.erb index 2fa7270..66c1973 100644 --- a/ext/mall/mall.c.erb +++ b/ext/mall/mall.c.erb @@ -17,7 +17,23 @@ static VALUE mMall; * int keepcost; // top-most, releasable (via malloc_trim) space * }; */ +<% +mallinfo_keys = %w( +arena +ordblks +smblks +hblks +hblkhd +usmblks +fsmblks +uordblks +fordblks +keepcost +) %> +<% mallinfo_keys.each { |x| %> +static VALUE sym_<%= x %>; +<% } %> static VALUE info(VALUE klass) { @@ -25,7 +41,7 @@ static VALUE info(VALUE klass) struct mallinfo stats = mallinfo(); /* whee aggregate returns :( */ #define MALLINFO_SET(KEY) \ - rb_hash_aset(rv, ID2SYM(rb_intern(#KEY)), INT2FIX(stats.KEY)) + rb_hash_aset(rv, sym_##KEY, INT2FIX(stats.KEY)) MALLINFO_SET(arena); MALLINFO_SET(ordblks); @@ -85,6 +101,9 @@ void Init_mall(void) #ifdef HAVE_MALLOC_STATS rb_define_singleton_method(mMall, "dump_stats", dump_stats, 0); #endif /* HAVE_MALLOC_STATS */ +<% mallinfo_keys.each { |x| %> + sym_<%= x %> = ID2SYM(rb_intern("<%= x %>")); +<% } %> <% %w( mxfast nlblks grain keep -- cgit v1.2.3-24-ge0c7