PHP高手應該瞭解的php內存機制

先上圖:

在這裏插入圖片描述

解釋一下這個圖:


	(上圖由於粗心,出現了錯誤,其實1000那個值並沒有開闢新的堆內存,只是修改的第一個堆內存的值:把10修改成了1000)

	首先,當我們聲明一個變量時(比如$a = 10;),PHP的工作是:把$a這個名字存放在棧內存中,把它的值存放在堆內存中,它們
	
	之間通過某種機制進行綁定(具體是什麼我也不大清楚 --)。


	$b = $a; 這個就比較容易理解了:這個時候,PHP的工作是:當我們使用 $a 變量的時候,PHP通過某種機制快速的找到變量相

	對應的值,然後把值賦給$b( php把$b存放在棧內存中,把10存放在堆內存中,這個10是通過$a取出來的 )。

	
	$c = &$a; 值引用:兩個變量公用一個堆內存。這時候PHP的工作是:  把$a的綁定機制,複製一份給$c(這時候輸出$c就是$a

	的值,$a變量的值變成什麼,$c的值也就是什麼,因爲他們用的是同一個內存空間).

	
	unset($a);銷燬這個變量,注意:PHP銷燬的只是棧內存中$a這個變量,與之對應的堆內存中值並沒有被銷燬。 值是PHP垃圾回收機制

	回收的。

		

簡單談一下PHP垃圾回收機制


	PHP運行時,要把所有的代碼加載到內存中運行,運行時會檢測哪些變量沒有被使用,沒有被使用的變量(或者unset掉的變量),

	與之相對應堆內存中的值會被PHP釋放掉,運行結束後,釋放所有棧內存和堆內存。

以上內容由博主自己理解並總結的,如有錯誤,萬分感謝各位大佬的指正!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章