[PHP-dev 145] Re: mgregex in PHP4.2?

Osamu Shigematsu php-dev@php.gr.jp
Thu, 13 Dec 2001 16:59:28 +0900


重松です。こんにちは。

> php4_mbregex-1.3.1.tar.gzを見る限り1箇所も
> malloc(), calloc(), realloc(), free() は使用されていません。
> PHP拡張モジュール作成のお約束である
> emalloc(), ecalloc(), erealloc(), efree() をcallしてます。
> 
> メモリ不足でアロケートできない場合は、PHP側がメッセージを
> 出してくれるはずです。

ご教授ありがとうございます。
以前、塚田さんが置き換えた、というようなことをおっしゃっていたように
記憶していたのですが、もう置き換わったのかなと思ったので。

emalloc() が ruby の ruby_xmalloc() と等価かどうかまで知りませんので、
調べてみたいと思います。

>> 今、4.1.0 を入れている最中なので、まだ、mbregex のソースを
>> 良く拝見してないのですが。
> 
> たいした量のソースじゃないので見ましょう。

[shige@Dronjo mbregex]$ find -type f -exec grep malloc {} \;
#define xmalloc ruby_xmalloc
void *xmalloc _((size_t));
#define xmalloc emalloc
    stackx = (type*)xmalloc(2 * xlen * sizeof(type));                   \
#define TMALLOC(n,t)    ((t*)xmalloc((n)*sizeof(t)))
             actual space, which should have been obtained with malloc.
      bufp->buffer = (char*)xmalloc(INIT_BUF_SIZE);
      bufp->must_skip = (int *) xmalloc((1 << MBRE_BYTEWIDTH)*sizeof(int));
                pre->fastmap = (char*)emalloc((1 <<
MBRE_BYTEWIDTH)*sizeof(char));

確認しました。
xmalloc で emalloc が呼ばれるようですね。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp