鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全/ PHP垃圾回收

PHP垃圾回收

變量名是存放在??臻g的,棧區(qū)是先進后出,那么主動 unset 一個變量的時候,它是怎么被彈出的?

回答
編輯回答
下墜

php中變量是分配在執(zhí)行棧的尾部,執(zhí)行棧zend_execute_data,實際是一塊堆內(nèi)存,是個變長結(jié)構(gòu)體,由zval來存儲變量的值,變量名是存儲在symbol_table中,在unset時,并沒有進行出棧操作,而是將變量名稱從全局符號表(函數(shù)中則為函數(shù)執(zhí)行棧的符號表)中刪除,并且將存儲其值的zval置為IS_UNDEF,函數(shù)中的臨時變量的內(nèi)存會在函數(shù)執(zhí)行結(jié)束時進行釋放,全局變量則在整個程序執(zhí)行結(jié)束后進行釋放

2018年9月22日 08:39