コンピューターで次のPHPプログラムを実行した場合
echo memory_get_usage();
echo "|";
echo memory_get_usage();
echo "|";
echo memory_get_usage();
出力を取得します
635048|635080|635080
このことから、への最初の呼び出しmemory_get_usage
は32KBのメモリを保持しているように見えます。echo
私はステートメントなしでこれを試しました
echo memory_get_usage();
echo memory_get_usage();
echo memory_get_usage();
同様の結果が得られました
634504634536634536
//broken out 634504, 634536, 634536
ステートメントを削除するecho
と、スクリプトの全体的なメモリ使用量が削減されますが、への最初の呼び出し後も32KBが保持されmemory_get_usage
ます。どうしてこれなの?
複数のコンピューターでこれを試しましたが、実際の数は異なりますが、ギャップは同じままです。
私が(私が思うに)この関数のソースを見ると
//File: php-5.3.19/ext/standard/var.c
PHP_FUNCTION(memory_get_usage) {
zend_bool real_usage = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &real_usage) == FAILURE) {
RETURN_FALSE;
}
RETURN_LONG(zend_memory_usage(real_usage TSRMLS_CC));
}
そこには、必ずしも「この変数をメモリに保持する」と書かれているものは何もありません。しかし、私は何年も真剣にCを書いたことがなく、PHPソースを専門的にハッキングしたことはなく、実行を追跡する能力はまったくありません。
だから、私の質問は、その32KBのメモリを何が保持しているのか、そしてそれはPHPソースコードのどこで発生するのか、そして/またはmemory_get_usage
エントリポイントからそれをどのように追跡できるのかということです。