FindRegular 関数の文字列バッファNo.02917
Iranoan さん 11/03/26 18:35
 
 秀まるおさん今日は、Iranoan です。
 FindRegular など正規表現を扱う関数について、検索対象文字列で許されて
いるデータ長は幾つでしょうか?

[ ]
RE:02917 FindRegular 関数の文字列バッフNo.02918
秀まるお さん 11/03/27 14:12
 
 内部的な作りとして…

 検索対象文字列の長さには特に制限は無いです。理論的には32bitアプリケー
ションソフトのアドレス空間範囲内いっぱいまで大丈夫だと思います。

 正規表現パターンの長さとしては、実は64キロバイトより長い文字列には対応
してない部分があります。

 あと、HmJre.dllの内部では、いわゆるLocalAllocとかを使ってメモリを確保
するような処理がたくさんあるので、あんまり大きなデータを渡すとメモリ確保
の段階でエラーになる可能性はあります。例えば繰り返しを含む正規表現がある
と、検索対象文字列の数倍程度のメモリを余計に使ったりするので、それでエ
ラーになると内部エラーで落ちてしまう可能性はあります。

[ ]
RE:02918 FindRegular 関数の文字列バッフNo.02919
Iranoan さん 11/03/27 15:14
 
 秀まるおさん今日は、Iranoan です。
>  あと、HmJre.dllの内部では、いわゆるLocalAllocとかを使ってメモリを確保
> するような処理がたくさんあるので、あんまり大きなデータを渡すとメモリ確保
> の段階でエラーになる可能性はあります。
 ハッキリと何バイト、とは言えないんですね。

 途中で切れても構わないので、次の方法で $reg_exp エラーになったので、
お聞きしたしだいです。
//------------------------------------------------------------
$$tmp = gettext( 0, 0, width + 2, linecount );
##top = dllfunc( "FindRegular", $reg_exp, $$tmp, 0 );

[ ]
RE:02919 FindRegular 関数の文字列バッフNo.02920
秀まるお さん 11/03/27 21:38
 
 メモリのアロケートでエラーになったということなのだとしたら、それはつま
り、秀丸エディタそのものやプロセス内にロードされるモジュールすべてを含め
たトータルでのメモリ容量不足ということになるので、HmJre.dll自体のメモリ
使用量だけで「何バイトになったらダメ」みたいに言うことは出来ないと思いま
す。

 あいまい検索の設定の所にある「HmJre.dll固有のヒープ領域を使う」をONに
している場合なら、それをOFFにすることでメモリ不足は起きにくくはなるかな
ぁといのうはありますけども…


 基本的に、HmJre.dllはかなりメモリを食うような作りにはなってしまってま
す。例えば

    繰り返しパターンの数 × 検索対象文字列の長さ

 くらいのメモリは最低でも食ってしまいます。他にもいろいろ高速化のために
一時的なメモリを確保するような処理があったと思います。

[ ]
RE:02920 FindRegular 関数の文字列バッフNo.02921
Iranoan さん 11/03/27 21:55
 
 秀まるおさん今日は、Iranoan です。
>  メモリのアロケートでエラーになったということなのだとしたら、それはつま
> り、秀丸エディタそのものやプロセス内にロードされるモジュールすべてを含め
> たトータルでのメモリ容量不足ということになるので、HmJre.dll自体のメモリ
> 使用量だけで「何バイトになったらダメ」みたいに言うことは出来ないと思いま
> す。
 了解です。

[ ]