[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