ObjectSpace.memsize_of(obj) should return with sizeof(RVALUE)
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.
Updated by sam.saffron (Sam Saffron) over 9 years ago
Personally I have only ever seen mention of this in http://stackoverflow.com/questions/10068018/memory-size-of-a-hash-or-other-object
I googled pretty hard and all I saw was wonderful pictures of tenderlove and a slightly less accurate description here: http://www.slideshare.net/tenderlove/hidden-gems-of-ruby-19 http://imgur.com/yeFYtiM
I think we should break compatibility here and properly document, cause people just have no idea about this now
Updated by hsbt (Hiroshi SHIBATA) over 9 years ago
- Target version changed from 2.1.0 to 2.2.0
Updated by ko1 (Koichi Sasada) over 8 years ago
- 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.
Updated by usa (Usaku NAKAMURA) over 8 years ago
- Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 2.0.0: WONTFIX, 2.1: UNKNOWN