少し前まで、何らかのアクションを行った後、それ自体への代入変数について議論しました。
変数を自分自身に割り当てる [ AI ]:
echo memory_get_usage() . "\n"; // 645680
$repeatedString = str_repeat('Hello,', 10000);
echo memory_get_usage() . "\n"; // 705944, AI_delta1 = 60264
$repeatedString = explode(',', $repeatedString);
echo memory_get_usage() . "\n"; // 3337888, AI_delta2 = 2631944
echo memory_get_peak_usage() . "\n"; // AI_peak = 3401024
変数を別の変数に割り当てる [ AAV ]:
echo memory_get_usage() . "\n"; // 645752
$repeatedString = str_repeat('Hello,', 10000);
echo memory_get_usage() . "\n"; // 706024, AAV_delta1 = 60272
$explodedString = explode(',', $repeatedString);
echo memory_get_usage() . "\n"; // 3398256, AAV_delta2 = 2692232
echo memory_get_peak_usage() . "\n"; // AAV_peak = 3400984
どちらの場合もメモリ使用量のテストを作成し、値を減算します。
AAV_delta1 - AI_delta = 8
AAV_delta2 - AI_delta2 = 60288
AAV_peak - AI_peak = -40
この結果によると、使用するアプローチ、メモリ使用量は同じです。$repeatedString
以下のコードで変数を使用するかどうかは問題です。
私の結論は正しいですか、それとも私のテストは正しくありませんか?
なぜこのようになるのでしょうか?
また質問: AAV_delta1 - AI_delta = 8
、私はそれが 0 に等しいはずだと思います。なぜ 8 に等しいのですか?
注: メモリ使用量はシステムによって異なる場合があります。
PHP バージョン: 5.3.5-1ubuntu7.11。