diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-29 20:19:14 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-29 20:19:14 +0000 |
commit | 1142de8e2a787597c0d52d6bd6f2054d4a1762a7 (patch) | |
tree | 6aa658f38ea6cc1181814a627a1cd350af1fdf8e /gc.c | |
parent | b7573a00813dedcc2b1e57bac95ed91326111d23 (diff) | |
download | ruby-1142de8e2a787597c0d52d6bd6f2054d4a1762a7.tar.gz |
use id_table for constant tables
valgrind 3.9.0 on x86-64 reports a minor reduction in memory usage
when loading only RubyGems and RDoc by running: ruby -rrdoc -eexit
before: HEAP SUMMARY:
in use at exit: 2,913,448 bytes in 27,394 blocks
total heap usage: 48,362 allocs, 20,968 frees, 9,034,621 bytes alloc
after: HEAP SUMMARY:
in use at exit: 2,880,056 bytes in 26,712 blocks
total heap usage: 47,791 allocs, 21,079 frees, 9,046,507 bytes alloc
* class.c (struct clone_const_arg): adjust for id_table
(clone_const): ditto
(clone_const_i): ditto
(rb_mod_init_copy): ditto
(rb_singleton_class_clone_and_attach): ditto
(rb_include_class_new): ditto
(include_modules_at): ditto
* constant.h (rb_free_const_table): ditto
* gc.c (free_const_entry_i): ditto
(rb_free_const_table): ditto
(obj_memsize_of): ditto
(mark_const_entry_i): ditto
(mark_const_tbl): ditto
* internal.h (struct rb_classext_struct): ditto
* object.c (rb_mod_const_set): resolve class name on assignment
* variable.c (const_update): replace with const_tbl_update
(const_tbl_update): new function
(fc_i): adjust for id_table
(find_class_path): ditto
(autoload_const_set): st_update => const_tbl_update
(rb_const_remove): adjust for id_table
(sv_i): ditto
(rb_local_constants_i): ditto
(rb_local_constants): ditto
(rb_mod_const_at): ditto
(rb_mod_const_set): ditto
(rb_const_lookup): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 26 |
1 files changed, 13 insertions, 13 deletions
@@ -2003,19 +2003,19 @@ is_pointer_to_heap(rb_objspace_t *objspace, void *ptr) return FALSE; } -static int -free_const_entry_i(st_data_t key, st_data_t value, st_data_t data) +static enum rb_id_table_iterator_result +free_const_entry_i(VALUE value, void *data) { rb_const_entry_t *ce = (rb_const_entry_t *)value; xfree(ce); - return ST_CONTINUE; + return ID_TABLE_CONTINUE; } void -rb_free_const_table(st_table *tbl) +rb_free_const_table(struct rb_id_table *tbl) { - st_foreach(tbl, free_const_entry_i, 0); - st_free_table(tbl); + rb_id_table_foreach_values(tbl, free_const_entry_i, 0); + rb_id_table_free(tbl); } static inline void @@ -3089,7 +3089,7 @@ obj_memsize_of(VALUE obj, int use_all_types) size += st_memsize(RCLASS(obj)->ptr->iv_tbl); } if (RCLASS(obj)->ptr->const_tbl) { - size += st_memsize(RCLASS(obj)->ptr->const_tbl); + size += rb_id_table_memsize(RCLASS(obj)->ptr->const_tbl); } size += sizeof(rb_classext_t); } @@ -4056,22 +4056,22 @@ mark_m_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl) } } -static int -mark_const_entry_i(st_data_t key, st_data_t value, st_data_t data) +static enum rb_id_table_iterator_result +mark_const_entry_i(VALUE value, void *data) { const rb_const_entry_t *ce = (const rb_const_entry_t *)value; - rb_objspace_t *objspace = (rb_objspace_t *)data; + rb_objspace_t *objspace = data; gc_mark(objspace, ce->value); gc_mark(objspace, ce->file); - return ST_CONTINUE; + return ID_TABLE_CONTINUE; } static void -mark_const_tbl(rb_objspace_t *objspace, st_table *tbl) +mark_const_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl) { if (!tbl) return; - st_foreach(tbl, mark_const_entry_i, (st_data_t)objspace); + rb_id_table_foreach_values(tbl, mark_const_entry_i, objspace); } #if STACK_GROW_DIRECTION < 0 |