about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-02-06 06:09:19 +0000
committerEric Wong <normalperson@yhbt.net>2011-02-06 06:09:19 +0000
commitb5de76e22ba9f07ae7ea0c63a231f06b51c3f803 (patch)
tree6bb6d74ac32f9b8096b191a78c1bba649caa2677
parent876b1a89cf21e87fdba8159bd369504865c59f73 (diff)
downloadmall-b5de76e22ba9f07ae7ea0c63a231f06b51c3f803.tar.gz
avoid unnecessary rb_intern() calls
Micro-optimization :P  Oh well ERB makes it easy
-rw-r--r--ext/mall/mall.c.erb21
1 files changed, 20 insertions, 1 deletions
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