[#28337] constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

15 messages 2006/02/18
[#28338] Re: constant look up order in CVS HEAD — Tanaka Akira <akr@...17n.org> 2006/02/19

In article <1140229116.805371.31930.nullmailer@x31.priv.netlab.jp>,

[#28341] Re: constant look up order in CVS HEAD — GOTOU Yuuzou <gotoyuzo@...> 2006/02/19

In message <87lkw8xfay.fsf@m17n.org>,

[#28342] Re: constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...> 2006/02/19

まつもと ゆきひろです

[ruby-dev:28299] Re: packing small Struct

From: Tanaka Akira <akr@...17n.org>
Date: 2006-02-05 15:21:46 UTC
List: ruby-dev #28299
In article <1139149487.648968.25908.nullmailer@x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> 要素が3個以下のStructがどれだけあるのかという点が気にならな
> いでもないですが、面白いのでコミットしてください。

入れました。

cons セルが欲しいという人はたくさん 2要素の Struct を作るの
ではないかと思っています。きっと。

> 要素が3個以下のArrayってのはそれなりにありますからうれしい
> ことも多いかもしれません。が、RARRAY(ary)->ptrというイディオ
> ムが全滅するのは痛いかも。Stringは...、どうなんでしょう。理
> 屈では32bit CPUでは24文字パックできるわけですが。

RARRAY(ary)->ptr あたりが使えなくなるのはたしかに痛いんです
が、Struct での経験からすると、コンパイルエラーで検出できま
すし、RARRAY_PTR(ary) を用意しておけば機械的な置換で済むので、
面倒ではあるが難しくはない、と思っています。

あと、32bit では 3*4=12bytes ですね。
(最後に入れる NUL を除いて 11bytes)

起動時点では...

% ruby -e 'h = Hash.new(0); ObjectSpace.each_object(String) {|o| h[o.length] += 1 }; h.keys.sort.each {|k| puts "#{k} #{"*" * h[k]}" }'
0 *
1 *******
2 *
3 *
4 **
5 **
6 *
7 *
9 *
10 *****
11 ***
12 *********************
13 *****************************************
14 ************************
15 ************
16 ********
17 ****
18 ****
19 *********
20 **
22 ***
25 *
27 *
33 *
37 *
38 *
48 *
124 **

うぅむ、惜しい。ちょうど納まらないところから増えてますね。

まぁ、64bit 時代はかなり近いので 24bytes という値もかなり現
実的で、その場合は上の山はほとんど納まってしまいます。

もちろんアプリケーション次第ではあるんですが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread