2

いくつかの PHP スクリプトに割り当てられているメモリの量を調べることにしたところ、約 130KiB でピークに達していることがわかりました。スクリプトで何が起こっているかを考えると、悪くないと思いました。

次に、スクリプトの開始点を確認することにしました。私は約32KiBを期待していました。

代わりに 121952 バイトを取得しました。その後、完全に欠落したスクリプトをテストしてみました:

<?php 
echo memory_get_usage();

また、割り当てられた同じ量のメモリで開始されました。

明らかに、PHP はスクリプトを実行する前にスクリプトにいくらかのメモリを割り当てようとしていますが、これは少し過剰に思えます。

ただし、その時点でシステムが使用できるメモリの量に基づいて、動的ではないようです。他のプロセスを開いてシステム メモリを消費しようとしましたが、事前に割り当てられたメモリ量はまったく同じバイト数のままでした。

これはスクリプトごとに設定可能ですか? PHP は各スクリプトに割り当てる量をどのように決定しますか?

PHP バージョン 5.4.7 の使用

ありがとう。

4

1 に答える 1

5

このmemory_get_usage関数は、PHP のメモリ アロケータに直接問い合わせて、この情報を取得します。プロセス全体やシステム全体が使用しているメモリ量ではなく、PHP 自体が使用しているメモリ量を報告します。

追加の引数を渡さない場合true、コードが使用するメモリの正確な量が返されます。memory_get_usage(true)これは、レポートを超えることはありません。

呼び出すmemory_get_usage(true)と、アロケーターがシステムから予約したヒープのサイズが返されます。これには、コードで実際には使用されていないが、コードで直接使用できるメモリが含まれます。

スクリプトがアロケーターで既に利用可能なメモリよりも多くのメモリを必要とする場合、アロケータは OS から別の大きなチャンクを予約します。数バイトしか増加しない可能性がありますがmemory_get_usage(true)、急激に増加することがわかります。memory_get_usage()

いつ、どのくらいのメモリを割り当てるかを決定するためにアロケータが使用する正確な戦略は、コンパイル時に PHP に組み込まれます。この動作を変更するには、ソースを編集して PHP をコンパイルする必要があります。

于 2013-01-10T14:54:50.740 に答える