diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-01 20:29:46 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-01 20:29:46 +0000 |
commit | a17ffebfa0bff3c8843ef15b18020d8bd0662f4c (patch) | |
tree | c360c103af4a8cbef82db1a0a6fcbc6a38c5f370 /eval_error.c | |
parent | 3b841719c9c4f31f9f36f65750f3bf714b978fe9 (diff) |
marshal.c: lazy compat_tbl allocation
In some common cases, compat_tbl is unused in dump_arg/load_arg,
so avoid malloc/free costs for the unused table.
ruby -e 'h = {a: :b}; 600000.times { Marshal.load(Marshal.dump(h)) }'
before:
real 0m2.458s
user 0m2.450s
sys 0m0.006s
after:
real 0m2.122s
user 0m2.110s
sys 0m0.011s
* marshal.c (w_class): check dump_arg->compat_tbl before lookup
(w_object): lazy init ->compat_tbl before insert
(obj_alloc_by_class): ditto
(clear_dump_arg): free only non-NULL ->compat_tbl
(clear_load_arg): ditto for ->compat_tbl
(marshal_dump): ->compat_tbl defaults to zero
(marshal_load): ditto for ->compat_tbl
(r_entry0): check l->compat_tbl before lookup
(r_fixup_compat): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47756 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval_error.c')
0 files changed, 0 insertions, 0 deletions