[PHP-users 10186] Re: リソース変数の開放のタイミング
Yasuo Ohgaki
php-users@php.gr.jp
Wed, 18 Sep 2002 12:41:33 +0900
大垣です。
桝形 誠二 wrote:
>>リソースが削除されるのは参照数が0になった時、またはスクリプトが
>>終了しリソースが必要なくなった時です。
>
>
> という事は( 適当な例ですみません )、
>
> <?
> $Connect = mysql_connect( ... ); // refcount = 1
$Connect refcount=1
> $Result = mysql_db_query( ... ); // refcount = 2
ここで$Connectのrefcountが2になる事はありません。
$Connect refcount=1
$Result refcount=1
> mysql_free_result( $Result ); // refcount = 1
$Result refcount=0
> // 上記処理では結果領域は実際には開放されない。
> mysql_close( $Connect ); // refcount = 0
$Result refcount=0
$Connect refcount=0
> // 上記処理で結果領域の開放とmysql_closeが行われる。
> ?>
>
> と、いう事になる。。。と解釈しました。
> 間違っていたら指摘して下さい。
>
> 間違っていたとしたら、リソースはそれぞれ独立して
> 参照しているのでしょうか?
リソースも変数も同じです。作成された時はrefcount=1,
代入されるとrefcountが1づつ増えます。
>
> また、参照数が0になった時に削除されるとなると専用の
> 関数ではなく、unset関数等で削除しようとしても同様の
> 事になるのでしょうか?
ほぼ同じですが、多少動作が違います。
ユーザーレベルでは同じと考えても差し支えないと思います。
専用関数と使うとその関数のコール中に削除。unsetを使った
場合、次のOPコードを実行する前に削除されます。
# と言っても、PHPはメモリをキャッシュしているので本当
# 全部のメモリをシステムに返す訳ではありません。
--
Yasuo Ohgaki