aboutsummaryrefslogtreecommitdiffstats
path: root/inits.c
diff options
context:
space:
mode:
authorwatson1978 <watson1978@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-18 01:49:33 +0000
committerwatson1978 <watson1978@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-18 01:49:33 +0000
commit7580a9f709f0d40e38232cb97d31c754f155c182 (patch)
tree3df5ccfc0492a2b04e05d48d38f81c6e27990c5d /inits.c
parent8981f0e1c11b868256f91a3c074939acedf7cca0 (diff)
downloadruby-7580a9f709f0d40e38232cb97d31c754f155c182.tar.gz
Improve performance of creating Hash object
When generate Hash object, the heap area of st_table will be always allocated in internally and seems it take a time. To improve performance of creating Hash object, this patch will reduce count of allocating heap areas for st_table by reuse them. Performance of creating Hash literal -> 1.53 times faster. [Fix GH-1766] [ruby-core:84008] [Feature #14146] ### Environment * OS : macOS 10.13.1 * CPU : 1.4 GHz Intel Core i7 * Compiler : Apple LLVM version 9.0.0 (clang-900.0.39) ### Before $ ./miniruby -v -I. -I../benchmark-ips/lib ~/tmp/bench/literal.rb ruby 2.5.0dev (2017-11-28 hash 60926) [x86_64-darwin17] Warming up -------------------------------------- Hash literal 51.544k i/100ms Calculating ------------------------------------- Hash literal 869.132k (± 1.1%) i/s - 4.381M in 5.041574s ### After $ ./miniruby -v -I. -I../benchmark-ips/lib ~/tmp/bench/literal.rb ruby 2.5.0dev (2017-11-28 hash 60926) [x86_64-darwin17] Warming up -------------------------------------- Hash literal 63.068k i/100ms Calculating ------------------------------------- Hash literal 1.328M (± 2.3%) i/s - 6.685M in 5.037861s ### Test code require 'benchmark/ips' Benchmark.ips do |x| x.report "Hash literal" do |loop| count = 0 while count < loop hash = {foo: 12, bar: 34, baz: 56} count += 1 end end end git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'inits.c')
-rw-r--r--inits.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/inits.c b/inits.c
index 5822f04cab..2c2ef17e2a 100644
--- a/inits.c
+++ b/inits.c
@@ -16,6 +16,7 @@
void
rb_call_inits(void)
{
+ CALL(st);
CALL(Method);
CALL(RandomSeedCore);
CALL(sym);