diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-08-18 21:37:16 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 16:21:47 +0900 |
| commit | 18e3d39ee23389d9a7955149c09b6de026804ca3 (patch) | |
| tree | 2448219106417e09af82e72e8c017b5fb298c441 /mrbgems/mruby-os-memsize/src | |
| parent | 55163a8a0a5737e9113f16d0f03b7ab4258706ba (diff) | |
| download | mruby-18e3d39ee23389d9a7955149c09b6de026804ca3.tar.gz mruby-18e3d39ee23389d9a7955149c09b6de026804ca3.zip | |
Fixed wrong size calculation for `memsize_of()`.
Diffstat (limited to 'mrbgems/mruby-os-memsize/src')
| -rw-r--r-- | mrbgems/mruby-os-memsize/src/memsize.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/mrbgems/mruby-os-memsize/src/memsize.c b/mrbgems/mruby-os-memsize/src/memsize.c index 625ffb258..359c2683c 100644 --- a/mrbgems/mruby-os-memsize/src/memsize.c +++ b/mrbgems/mruby-os-memsize/src/memsize.c @@ -108,17 +108,6 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj) if(!MRB_PROC_CFUNC_P(proc)) size += os_memsize_of_irep(mrb, proc->body.irep); break; } - case MRB_TT_DATA: - size += mrb_objspace_page_slot_size(); - break; -#ifndef MRB_NO_FLOAT - case MRB_TT_FLOAT: -#ifdef MRB_WORD_BOXING - size += mrb_objspace_page_slot_size() + - sizeof(struct RFloat); -#endif - break; -#endif case MRB_TT_RANGE: #ifndef MRB_RANGE_EMBED size += mrb_objspace_page_slot_size() + @@ -131,20 +120,25 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj) ptrdiff_t ci_size = f->cxt->ciend - f->cxt->cibase; size += mrb_objspace_page_slot_size() + - sizeof(struct RFiber) + sizeof(struct mrb_context) + sizeof(mrb_value) * stack_size + sizeof(mrb_callinfo) * ci_size; break; } - case MRB_TT_ISTRUCT: +#ifndef MRB_NO_FLOAT + case MRB_TT_FLOAT: +#endif + case MRB_TT_INTEGER: + if (mrb_immediate_p(obj)) + break; + case MRB_TT_DATA: + case MRB_TT_ISTRUCT: size += mrb_objspace_page_slot_size(); break; /* zero heap size types. * immediate VM stack values, contained within mrb_state, or on C stack */ case MRB_TT_TRUE: case MRB_TT_FALSE: - case MRB_TT_INTEGER: case MRB_TT_BREAK: case MRB_TT_CPTR: case MRB_TT_SYMBOL: |
