From: Tanaka Akira Date: 2006-02-06T00:21:46+09:00 Subject: [ruby-dev:28299] Re: packing small Struct In article <1139149487.648968.25908.nullmailer@x31.priv.netlab.jp>, Yukihiro Matsumoto 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]