ホームページ  >  記事  >  バックエンド開発  >  PHP 開発の経験: 引用は悪い習慣です_PHP チュートリアル

PHP 開発の経験: 引用は悪い習慣です_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:55:08821ブラウズ

PHP プログラムを作成するとき、多くの人はパラメーターを渡すときに参照を使用することを好みます。特に配列が非常に大きい場合は追加するのが好きです。

関数 binsearch(&$arr, $key, $value)
{
$low = 0;
$high = count($arr);

while ($low $mid = Floor($low + ($high - $low) / 2);
$item = $arr[$mid][$key]; $item == $value) {
return $mid;
} else if ($value > $item) {
$low = $mid + 1; else {
$high = $mid
}
}
false を返す
}

ここでは、整数のオーバーフローを防ぐために、$mid は最初に減算してから加算する方法を使用して計算されます。複雑にするつもりはありませんでした。
テストには次のコードを使用しました:

$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

  • 2
  • 次のページ
  • http://www.bkjia.com/PHPjc/364508.html
www.bkjia.com

tru​​e

技術記事 PHP プログラムを作成するとき、多くの人はパラメーターを渡すときに参照を使用することを好みます。特に配列が非常に大きい場合は追加するのが好きです。 function binsearch($arr,...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。