From: nagachika Date: 2010-10-29T19:31:10+09:00 Subject: [ruby-dev:42490] Re: memory profiler for test-all nagachika と申します。 どのメール/ticket に対するコメントにするか迷いましたが このメモリプロファイラで ext/objspace を利用していたのでこちらに。 r29602 からの trunk では rb_classext_t の構造が変更になったため ObjectSpace.memsize_of は Class/Module の定数のテーブルぶんの メモリサイズを加算しそこねています。 r29602 は r29604 の private constant のための前準備なので、 こちらもちょっと待った状態かもしれませんが、一応報告まで。 ex) require "objspace" cls = Class.new 10.times do |i| p [i, ObjectSpace.memsize_of(cls)] cls.send(:const_set, :"A#{i}", nil) end @trunk [0, 80] [1, 80] [2, 80] [3, 80] [4, 80] [5, 80] [6, 80] [7, 80] [8, 80] [9, 80] @修正後 [0, 80] [1, 148] [2, 148] [3, 148] [4, 148] [5, 148] [6, 292] [7, 316] [8, 340] [9, 364] Index: ext/objspace/objspace.c =================================================================== --- ext/objspace/objspace.c (リビジョン 29626) +++ ext/objspace/objspace.c (作業コピー) @@ -69,6 +69,9 @@ if (RCLASS(obj)->ptr->iv_tbl) { size += st_memsize(RCLASS(obj)->ptr->iv_tbl); } + if (RCLASS(obj)->ptr->const_tbl) { + size += st_memsize(RCLASS(obj)->ptr->const_tbl); + } size += sizeof(rb_classext_t); break; case T_STRING: