[Tokyo.pm] jus Benkyoukai

WATANABE Hirofumi watanabe @ ase.ptg.sony.co.jp
1999年 9月 19日 (日) 23:35:36 CDT


わたなべです.

Kazumasa Utashiro <utashiro @ iij.ad.jp> writes:

:> 現在の jperl は YES です. メモリ喰います. 文字クラス一回につ
:> きだいたい 8KB 使います.
:
:いい加減なことを言ってすみませんでした。ビットマップするんですね。

すみません. 現在は 32+4096+α バイトでした.

:ASCII が 256バイトなのだとすると、それに比べて数命令程度のペナルティで
:検査できるということでしょうか。

そうですね. 8KB だとペナルティなしですけど, ASCII 分と
0x8000 以上の日本語だけを対象にしてるので 4KB になります.
この操作にペナルティがかかります.

:8K が大きすぎないかどうかは判断が難しいところです。64K だともちろん話
:になりませんが、8K だとしても100回使ってあれば 800K になって、ちょっと
:気になる量になってきます。最近はそのくらいは気にしないとしても、500回
:で 40M になると、僕が今使っているような主記憶 40M のマシン (DHU2) では
:結構なストレスです。ASCII なら、たったの 128K ですからかなりの違いです。

なんか途中で一桁間違ってる気がするんですけど,
500 回だと 4M ですよね(実際はその半分の 2M).
ASCII だとたったの 16K ですね(って減らしてどうする).

:文字クラスが500回出て来るプログラムというのは、もちろん普通ではありま
:せんが、自動生成するようなものだと考えられない量ではありません。そのよ
:うな「ほとんど起こりそうもないけど、絶対起こらないとは限らない」状況に
:どう対応するかは、設計ポリシーの問題でしょう。99% のプログラムでは問題
:無いんだからいいじゃないか、という主張する人がいてもおかしくはないと思
:います。

実際はずーっとその文字クラスが存在してるわけではないですよね?
free されると思うんですけど.
逆に回数が増えると malloc/free の時間的なコストという問題はあるかも.

:実装としては、実際の使われ方を考えると、8K のフラットなテーブルにする
:よりも、indirect にした方が、検査速度もメモリ効率も向上するような気が
:します。日本語文字コードを前提とするならば、最初のテーブルは128バイト
:で足りるでしょう。/[あ-ん]/ みたいな表現なら、128 + 32 バイト程度です
:みますね。このような場合は、検査効率を優先して 128 + 256 に最適化する
:という手もあります。そう考えてみると、効率的には十分 acceptable な気も
:してきました :-)

たしかに sparse なテーブルなんで圧縮しないとまずいなとは思っ
てたんですけど, いままで誰も文句を言う人がいなかったのでその
まま現在に至ってます.
という意味では 99% 問題ないという設計ポリシーになりますね.

-- 
わたなべひろふみ



Tokyo-pm メーリングリストの案内