mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-os-memsize: more precise memory size for method tables
This commit is contained in:
@@ -27,6 +27,7 @@ mrb_noreturn void mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value sel
|
||||
mrb_method_t mrb_vm_find_method(mrb_state *mrb, struct RClass *c, struct RClass **cp, mrb_sym mid);
|
||||
mrb_value mrb_mod_const_missing(mrb_state *mrb, mrb_value mod);
|
||||
mrb_value mrb_const_missing(mrb_state *mrb, mrb_value mod, mrb_sym sym);
|
||||
size_t mrb_class_mt_memsize(mrb_state*, struct RClass*);
|
||||
#endif
|
||||
|
||||
mrb_value mrb_obj_equal_m(mrb_state *mrb, mrb_value);
|
||||
|
||||
@@ -72,7 +72,7 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj)
|
||||
case MRB_TT_MODULE:
|
||||
case MRB_TT_SCLASS:
|
||||
case MRB_TT_ICLASS:
|
||||
size += mrb_gc_mark_mt_size(mrb, mrb_class_ptr(obj)) * sizeof(mrb_method_t);
|
||||
size += mrb_class_mt_memsize(mrb, mrb_class_ptr(obj));
|
||||
/* fall through */
|
||||
case MRB_TT_EXCEPTION:
|
||||
case MRB_TT_OBJECT: {
|
||||
|
||||
@@ -310,6 +310,15 @@ mrb_gc_mark_mt_size(mrb_state *mrb, struct RClass *c)
|
||||
return (size_t)h->size;
|
||||
}
|
||||
|
||||
size_t
|
||||
mrb_class_mt_memsize(mrb_state *mrb, struct RClass *c)
|
||||
{
|
||||
struct mt_tbl *h = c->mt;
|
||||
|
||||
if (!h) return 0;
|
||||
return sizeof(struct mt_tbl) + (size_t)h->size * sizeof(mrb_method_t);
|
||||
}
|
||||
|
||||
void
|
||||
mrb_gc_free_mt(mrb_state *mrb, struct RClass *c)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user