[ruby-dev:31883] Re: optimize T_OBJECT space

From: Tanaka Akira <akr@...>
Date: 2007-09-28 05:51:13 UTC
List: ruby-dev #31883
In article <87myv7xsgl.fsf@fsij.org>,
  Tanaka Akira <akr@fsij.org> writes:

> 今考えましたが、アクセスが少ないところを変えるのがよさそうで
> すね。

extern long count_rclass_iv_tbl;
extern long count_rclass_m_tbl;
extern long count_rclass_super;
extern long count_rclass_iv_index_tbl;
#define RCLASS_IV_TBL(c) (*(count_rclass_iv_tbl++, &RCLASS(c)->ptr->iv_tbl))
#define RCLASS_M_TBL(c) (*(count_rclass_m_tbl++, &RCLASS(c)->m_tbl))
#define RCLASS_SUPER(c) (*(count_rclass_super++, &RCLASS(c)->super))
#define RCLASS_IV_INDEX_TBL(c) (*(count_rclass_iv_index_tbl++, &RCLASS(c)->ptr->iv_index_tbl))

として、例の rdoc を測ると以下のようになります。

iv_tbl:       1324544
m_tbl:        149021086
super:        98671514
iv_index_tbl: 226110192

これを見る限りは iv_tbl と super をまとめて外に出し、m_tbl
と iv_index_tbl は RClass に埋め込むのがよさそうです。

もちろんアプリケーションによって違うかもしれませんので、こう
いう測定や変更が簡単にできるようにアクセスをマクロに抽象化し
ておくのは良いことだとおもいます。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread