Issue #8984 has been updated by Koichi Sasada.

Status changed from Assigned to Closed
% Done changed from 0 to 100

Applied in changeset r48846.

----------
* ext/objspace/objspace.c: ObjectSpace.memsize_of(obj) returns
  with sizeof(RVALUE). [Bug #8984]
* gc.c (obj_memsize_of): ditto.
* NEWS: add a NEWS entry.
* test/objspace/test_objspace.rb: catch up this fix.
* test/ruby/test_file_exhaustive.rb: ditto.

----------------------------------------
Bug #8984: ObjectSpace.memsize_of(obj) should return with sizeof(RVALUE)
https://bugs.ruby-lang.org/issues/8984#change-50405

* Author: Koichi Sasada
* Status: Closed
* Priority: Normal
* Assignee: Koichi Sasada
* Category: ext
* Target version: current: 2.2.0
* ruby -v: -
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
----------------------------------------
Now, ObjectSpace.memsize_of(obj) return without sizeof(RVALUE).
For example, ObjectSpace.memsize_of('foo') returns 0 because shorter string are embedded in RVALUE.

Proposal is returning the size including sizeof(RVALUE).
If we introduce variable RVALUE size (*1), then it will help.

*1: for example, T_FLOAT only use sizeof(double).
    Only 2 words (or 1 word on 64bit enviornment) are needed.


Question is: it breaks compatibility, but anyone care about it?

Another option is to add optional parameter. memsize_of(obj, include_rvalue: true), etc.





-- 
https://bugs.ruby-lang.org/