Project

General

Profile

Actions

Bug #8984

closed

ObjectSpace.memsize_of(obj) should return with sizeof(RVALUE)

Added by ko1 (Koichi Sasada) about 11 years ago. Updated almost 10 years ago.

Status:
Closed
Target version:
[ruby-core:57666]

Description

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) about 11 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) almost 11 years ago

  • Target version changed from 2.1.0 to 2.2.0

Updated by ko1 (Koichi Sasada) about 10 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.
Actions #4

Updated by usa (Usaku NAKAMURA) almost 10 years ago

  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 2.0.0: WONTFIX, 2.1: UNKNOWN
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0