unset が PHP でメモリを解放するとどうなりますか?
まず第一に、PHP で設定を解除するとメモリが解放されますか?
まず、例を見てみましょう:
var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
出力 (異なるパーソナルコンピューターでは、システム、PHP バージョン、ロードされた拡張機能によって異なる場合があります)それぞれ異なります):
int(90440) int(90640) int(90472
気づいた 90472-90440=32 ということで、PHP の unset は実際にはメモリを解放しないという人もいますし、PHP の unset だけでメモリが本当に解放されるだけだという人もいます。大きな変数 (大量の 文字列、大きな配列) が解放されたとき、PHP レベルでメモリについて議論するのは無意味だとさえ言う人もいます
それでは、これらの 32 バイトはどこに行くのでしょうか?
この質問に答えるために、次の 2 つの側面から始めます:
これらの 32 バイトはどこに行ったのか
まず第一に 私たちは考え方を打ち破らなければなりません: PHP は C 言語とは異なり、表示するだけです メモリ割り当ては呼び出しによってのみ発生します
メモリ割り当て関連の API
つまり、PHP には、目に見えないメモリ割り当てプロセスがたくさんあります
$a = "laruence";
暗黙的なメモリ割り当てポイントは次のとおりです: 1. 変数にメモリを割り当てます。名前
を指定し、それをシンボルテーブルに保存します
2. 変数値にメモリを割り当てます
したがって、見た目だけを見てはいけません第二に、
PHP の unset によって実際にメモリが解放されることを疑ってはいけません (もちろん、また、参照とカウントを組み合わせるには、PHP の原則 (変数の分離/参照) を深く理解するために私の以前の記事を参照してください。ただし、このリリースは C プログラミングの意味でのリリースではなく、引き戻されません。 PHP の場合、メモリ割り当てのための C 言語に似た一連のメモリ管理 API が提供されます。これらの API は、PHP でこれらの API を介して内部的に管理されます。 emalloc を使用してメモリを適用する場合、PHP は単に OS にメモリを要求するのではなく、メモリを適用するロジックがある場合、OS に大きなメモリ ブロックを要求し、その一部を申請者に割り当てます。
たとえば、次の例のように、OS にメモリを要求する必要はありません。
ログイン後にコピー
つまり、変数 を定義するときです。 $a、PHP はシステムからの新しいメモリを適用しません。
同様に、メモリを解放するために efree を呼び出すと、PHP はメモリを OS に返しませんが、このメモリを OS が保持する空きメモリ リストに追加します。メモリの小さな部分、それはメモリキャッシュリストに入れられる可能性があります(追記、私が確認したPHPの一部のバージョン(PHP5.2.4、5.2.6、5.2.8など)は呼び出し時に減少しません) get_memory_usage() メモリ キャッシュ リスト内の使用可能なメモリ ブロック サイズに移動すると、設定解除後もメモリが変更されていないように見えます)。それでは、これらの 32 バイトがどこに行ったのか答えましょう。先ほど言ったように、大量のメモリです。割り当てプロセスは明示的ではありません。次のコードを読むと理解できます:
int(262144) int(262144) int(262144
出力:
ログイン後にコピー
増加するだけで減少しない配列
ハッシュテーブルは PHP の中核構造です (ハッシュテーブルを理解するには、詳細については以前の記事を参照してください) PHP 配列 (走査順序) の理解)、配列も彼女によって表現され、シンボル テーブルも連想配列です。 100 個の変数を定義し、[Unset them] を押して、出力を見てみましょう:string(43) "I am php.cn" int(90808) //赋值前 int(90976) int(90808) //是的, 内存正常释放
わぁ、メモリがこんなに少ないのはなぜですか?
これは、Hashtable の定義時に、メモリを割り当てることが不可能であるためです。未知の要素を保存するのに十分なメモリ ブロックが一度に必要なため、PHP は初期化中にメモリ ブロックのごく一部のみを HashTable に割り当て、十分でない場合は RESIZE して容量を拡張します。一方、上記の例では、100 個の変数を保存したときに、シンボル テーブルが不十分で、これらの 100 個の変数の設定を解除すると、メモリが占有されてしまいます。変数は解放されました (118848 – 104448) が、シンボル テーブルは縮小されなかったので、シンボル テーブル自体が占有するメモリは少なくなりました...
さて、PHP のメモリ管理についての予備的な理解はできましたか?
以上がunset が PHP でメモリを解放するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

9月3日の当ウェブサイトのニュースによると、韓国メディアetnewsは昨日(現地時間)、サムスン電子とSKハイニックスの「HBM類似」積層構造モバイルメモリ製品が2026年以降に商品化されると報じた。関係者によると、韓国のメモリ大手2社はスタック型モバイルメモリを将来の重要な収益源と考えており、エンドサイドAIに電力を供給するために「HBMのようなメモリ」をスマートフォン、タブレット、ラップトップに拡張する計画だという。このサイトの以前のレポートによると、Samsung Electronics の製品は LPwide I/O メモリと呼ばれ、SK Hynix はこのテクノロジーを VFO と呼んでいます。両社はほぼ同じ技術的ルート、つまりファンアウト パッケージングと垂直チャネルを組み合わせたものを使用しました。 Samsung Electronics の LPwide I/O メモリのビット幅は 512

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
