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 はメモリを解放しているだけだという人もいます。 . メモリが本当に解放されるのは、大きな変数 (多数の文字列、大きな配列) がある場合です。
それでは、メモリを unset すると解放されるのでしょうか?これらの 32 の単語 セクションはどこへ行ったのでしょうか?
この質問に答えるために、次の 2 つの側面から始めます:
これらの 32 バイトはどこへ行ったのでしょうか? まず第一に、PHP は C 言語とは異なりますという考えを打ち破る必要があります。 , 表示したもののみ メモリ割り当ては、メモリ割り当てに関連する API が呼び出されたときにのみ発生します つまり、PHP では、目に見えないメモリ割り当てプロセスがたくさんあります
例:
$a = "larence. ";
暗黙的 メモリ割り当てポイントは次のとおりです:
1.1. 変数名にメモリを割り当て、それをシンボル テーブルに格納します
2.2. 変数値にメモリを割り当てます したがって、単に見ることはできません。
第 2 に、PHP の unset が実際に行われることを疑ってはいけません。メモリは解放されますが、この解放は C プログラミングの意味での解放ではなく、OS には戻されません。
PHP の場合は、メモリ割り当て用の C 言語に似たメモリ管理 API のセット:
コードをコピー
erealloc(void *ptr, size_t size);
estrdup(const char * s);
estrndup(const char *s, unsigned int length);
これらの API は、C の API の意味に対応します。メモリは、これらの API を通じて PHP 内で管理されます。
emalloc を呼び出してメモリを適用すると、PHP は単に OS にメモリを要求するのではなく、OS に大きなメモリ ブロックを要求し、その一部をメモリに割り当てます。このようにして、メモリを適用するロジックがある場合、OS にメモリを要求する必要がなく、頻繁なシステム呼び出しを回避できます
例:
unset ($a);
var_dump(memory_get_usage(TRUE));
Output:
int(262144)
int(262144)
int(262144)
つまり、変数 $a を定義すると、PHP は適用されません。同様に、メモリを解放するために efree を呼び出すと、PHP はメモリを OS に返さず、その代わりに、このメモリを、小規模なメモリに対して保持する空きメモリ リストに追加します。メモリ キャッシュ リストに追加される可能性が高くなります (追記、私の検証など、PHP の一部のバージョンでは、get_memory_usage() を呼び出すときに、使用可能なメモリ ブロック サイズがメモリ キャッシュ リストは減算されないため、設定解除後もメモリが変更されていないように見えます。
ここで、これらの 32 バイトがどこに行くのか答えましょう。先ほど述べたように、多くのメモリ割り当てプロセスは明示的ではないことが理解できるでしょう。次のコードを読んだ後:
コードをコピー
コードは次のようになります:
unset($a);
var_dump(memory_get_usage());
出力:
string(43) "私はラルエンスです、http から://www.laruence.com"
int(90808) // 代入前
int(90976)
int(90808) //はい、メモリは正常に解放されます
90808-90808 = 0、これは正常です、つまりつまり、これらの 32 バイトは出力関数によって占有されます (厳密に言えば、出力ヘッダによって占有されます)
増加するだけで減少しない配列
配列も PHP の中心的な構造です。次のコードの場合:
コードをコピーします
コードは次のとおりです:
var_dump("私はラルエンスです、http://www.laruence.com より");
var_dump(memory_get_usage());
$array = array_fill(1, 100, "laruence");
foreach ($array as $key => $value) {
${$value . $key} = NULL;
}
var_dump(memory_get_usage());
foreach ($array as $key=> $value) {
unset( ${$value . $key});
}
var_dump(memory_get_usage());
100 個の変数を定義し、[Unset] をクリックして設定を解除しました。出力を見てみましょう。 code
すごい、なぜメモリがたくさんあるのでしょう?
さて、PHP のメモリ管理について予備的な理解はできましたか?
http://www.bkjia.com/PHPjc/327674.html
www.bkjia.com
true

ホット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 にアップグレードする方法について説明します。

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

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

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

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
