PHP プログラムを作成するとき、多くの人はパラメーターを渡すときに参照を使用することを好みます。特に配列が非常に大きい場合は追加するのが好きです。
関数 binsearch(&$arr, $key, $value)
{
$low = 0;
$high = count($arr);
$data = array();
for ($i = 0; $i {
$data[] = array("sq" => $i * 2); var_dump(binsearch($data, "sq", 10000));
binsearch を実行すると、常に約 0.2 秒かかることがわかりました。理論的には、100 万のデータを最大 20 回循環できます。どうしてこんなに遅いのでしょうか?
後でメモリを監視したところ、データ配列が 230M のメモリを占有していることがわかりました。 binsearch を実行すると、60K のメモリが占有されました。ただし、理論的には、binsearch
それほど多くのメモリを消費しないはずです。なぜなら、参照を使用しており、データ構造をまったく変更していないからだと思います。
その後、参照パラメータを削除したところ、参照に多くの CPU リソースが消費されたようで 0.0002 秒しかかかりませんでした。
PHP は内部的にコピーオンライトの原則に従います。実際、この参照は冗長です。
しかし、参照を追加すると速度が低下するのはなぜですか?今日はこの問題に焦点を当てます。真実を理解した後は、誰もが引用の使い方を知る必要があります。
binsearch を呼び出す前に $a = &$data を直接設定すると、この参照の速度が非常に速くなります。この問題は参照自体が原因ではないようです。
この質問は実際には、zend エンジンが PHP 変数をどのように管理するかに関するものです。
合計 2 ページ:
前のページ
1
true