[PHP] PHP底層效能原理測試 – PHP Core Performance Test

Intro

PHP底層效能原理測試


指標&記憶體

測試版本:PHP 5

$data2 = $data;
$data3 = $data;

以第一行為例:此時的宣告記憶體配置等同於$data2 = &$data,即記憶體不會因$data2宣告而多複製產生,只有在相依變數產生異動(Assign Write)時才會有相應機制:

$data先產生異動

異動事件如:

$data[0] = 'modified';
$value = &$data[0];

異動前記憶體共用同一份$data內容,以下為流程:

  1. 因為$data有相依變數,PHP會將異動前$data的記憶體內容複製或保留至暫存區(Temp),自己使用新的內容進行異動。

    此時記憶體有兩塊內容:新的$data與舊的$data內容

  2. 原本相依$data的變數($data2$data3)轉擁有或轉指向這個暫存區(Temp)。

  3. $data2又發生異動,則會同第一步自己使用新的內容進行異動,此時$data3為擁有暫存區(Temp)因為沒有其他相依變數。

    此時記憶體有三塊內容:$data,$data2,$data3內容

  4. $data3又發生異動,因為沒有相依變數,等於擁有內容則直接異動。

    以上在記憶體形成3塊由原生$data產出的內容,最後各自獨立。


Foreach Pointer

個人不偏好在foreach內使用Pointer,本身Loop內也沒有必要使用Pointer優化。

弊端方面就是foreach的特性,還會產生母變數記憶體複製的問題。

弊端特性之一:PHP Pass by reference in foreach

Leave a Reply

Your email address will not be published. Required fields are marked *