0

メモリで使用している定数と変数を比較してみましたが、奇妙な現象が見つかりました。

テストコード:

<?php
var_dump( memory_get_usage() );  // int(129100)
// I don't understand: I don't do someting but why there has the changed
var_dump( memory_get_usage() );  // int(129156)  
var_dump( memory_get_usage() );  // int(129156)

define('hello', 'WORLD');
// why here hasn't changed
var_dump( memory_get_usage() );  // int(129156)

$hello = 'WORLD';
var_dump( memory_get_usage() );  // int(129304)
?>
4

2 に答える 2

2

あなたは正確には何もしていません。呼び出しは、var_dump何かを初期化するか、何かを残す可能性があります。

https://github.com/php/php-src/blob/master/ext/standard/var.cを参照php_var_dumpしてください

于 2012-08-15T16:14:47.017 に答える
2

まず、PHP には多くのメモリ リークがあります。つまり、どこかにメモリを割り当てますが、解放しません。ですから、そのような効果を見ることを恐れないでください。しかし、今回はおそらく別のものです:

この例を見てください:

<?php

$data = array(0,0,0,0);
$data[0] = memory_get_usage();
$data[1] = memory_get_usage();

echo $data[0];
echo "\n";
echo $data[1];
echo "\n";

$data[2] = memory_get_usage();
echo $data[2];
echo "\n";
$data[3] = memory_get_usage();
echo $data[3];
echo "\n";

?>

出力は次のようになります。

626464
626464
626528
626528

「echo」への最初の呼び出しの後に変化することがわかります。これは、出力バッファーなどにメモリを割り当てている必要があります。内部的に printf(buffer, "...", ...) を使用して、標準出力に送信される文字列を生成している可能性があります。この文字列は後の呼び出しで再利用され、必要に応じてより長いバッファーにサイズ変更されます。

var_dump への呼び出しは間接的に echo 関数を使用し、おそらく最初の呼び出しで割り当てられた内部バッファーも使用します。

解決策:物事をより正確に測定するには、「測定」の前に各出力関数を1回呼び出すか、結果の最終出力の前にそれらを呼び出さないでください。

于 2012-08-15T16:35:07.560 に答える