[PHP-users 3051] Re: mbregex のインストール
php-users@php.gr.jp
php-users@php.gr.jp
Wed, 24 Oct 2001 04:57:29 +0900 (JST)
こんにちは、塚田と申します。
重松さん:
> あと、PHP 4.x の mbereg() は ruby ゆずりみたいですけど、
> GNU のコードの malloc() に失敗したときにそれを確認しないバグを
> そのまま引きずっているようなんですけど、これって、私の
> ソースコードの読みまちがいでしょうか?
> PHP-dev で同じネタを質問したのですが、情報を頂けなかったので、再度。
> # ruby は malloc() には失敗しないですが、PHP も失敗しない?
ご心配は理解しますが、バグでもないという反論をすると、
・メモリが足りなくならないように運用するものだ
ワークステーションで作業していてメモリが足りなくなるのと、
webサーバーで接続がたくさんきてメモリが足りなくなるのは、
かなり状況が違うと思います。
オブジェクト指向の実行環境でガーベージコレクタというのは、
暗黙のデストラクタとか、メモリブロックのフラグメントの
掃除などをうまく調整して、性能を向上させるものだと思いますが、
webアプリケーションの場合は、ガーベージコレクタを起動しても、
回収できる領域はそれほど無くて、かえって状況を悪くする
という事態も考えられます。
十分なメモリを用意して、手早く処理を行い、さっさと終了する
というのが、HTTPのアプリケーションの基本だと思います。
・メモリが無ければ作業をやめるしかない
必要なときに、それがないとどうしようもないのですが、
その際に後始末をすべて書いていたら、例外処理が多く
なってしまい、面白くありません。
malloc() が失敗しないというのも、メモリが無かったら
そこでプロセスを終了させているのだと思います。
(ですから、nullポインタを読み書きして、例外が上がって、
終了しても、たいして変わりが無い??)
以上は言い訳なのですが、
zend_alloc.h をみてみたら、 persist_alloc というのが
あったので、
#define xmalloc(size) persist_alloc(emalloc(size))
#define xcalloc(nmemb,size) persist_alloc(ecalloc(nmemb,size))
#define xrealloc erealloc
#define xfree efree
とすれば、少しは安心できるかもしれません。
-- zzz@_@ >
sender: Tsukada Takuya (塚田 卓也)
town: inaba hizume, Nagano City (長野市稲葉日詰)