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

PHP垃圾回收

變量名是存放在??臻g的,棧區(qū)是先進(jìn)后出,那么主動(dòng) unset 一個(gè)變量的時(shí)候,它是怎么被彈出的?

回答
編輯回答
下墜

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

2018年9月22日 08:39