[英]Performance of array_merge vs union in PHP
我試圖出於好奇而了解array_merge
和union
在PHP幕后的工作方式。
有人可以幫助我了解以下幕后的ZEND內部原理嗎:
array_merge
(在CPU和RAM上速度較慢) UNION
(各個方面都更快) 這是我正在運行的基准代碼: https : //gist.github.com/EnchanterIO/6e90f828c1b32c894d35267c353e83d2
使用PHP 7的輸出為:
➜ArrayMerge git:(master)✗php src / benchmark.php array_merge 20000
使用array_merge構建20000個元素的數組需要7秒鍾。
內存使用量為:8 MB。 內存峰值為:12288 MB。
➜ArrayMerge git:(master)✗php src / benchmark.php聯合20000
使用聯合構建20000個元素的數組花費了0秒。
內存使用量為:8 MB。 內存峰值為:10240 MB。
我的array_merge理論:
我正在查看用C語言編寫的用於數組合並的PHP源代碼 (即使這是正確的地方),盡管我不太熟悉該行話,但對我來說有點不可讀,這似乎是array_merge
是速度較慢的原因是需要額外的foreach,也由於array_merge
對結果數組中的數字鍵重新編號的事實。
我對UNION的理論是:
找不到它的源代碼,但據我所知,向數組添加元素的方式如下:
誰能進一步闡明這個過程,並深入解釋ZEND魔術的幕后故事?
更新:
我被引薦到以下鏈接,但仍然無法解決:
https://lxr.room11.org/xref/php-src%40master/Zend/zend_opcode.c#740 https://lxr.room11.org/xref/php-src%40master/Zend/zend_operators.c#897 https://lxr.room11.org/xref/php-src%40master/Zend/zend_hash.c#1915
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.