不管什么樣的編程語(yǔ)言仙蚜,在代碼的執(zhí)行過(guò)程中都是需要給它分配內(nèi)存的此洲,不同的是某些編程語(yǔ)言需要我們自己手動(dòng)的管理內(nèi)存,
某些編程語(yǔ)言會(huì)可以自動(dòng)幫助我們管理內(nèi)存:
不管以什么樣的方式來(lái)管理內(nèi)存委粉,內(nèi)存的管理都會(huì)有如下的生命周期:
?第一步:分配申請(qǐng)你需要的內(nèi)存(申請(qǐng))呜师;
第二步:使用分配的內(nèi)存(存放一些東西,比如對(duì)象等)贾节;
第三步:不需要使用時(shí)汁汗,對(duì)其進(jìn)行釋放;
不同的編程語(yǔ)言對(duì)于第一步和第三步會(huì)有不同的實(shí)現(xiàn):
手動(dòng)管理內(nèi)存:比如C栗涂、C++知牌,包括早期的OC,都是需要手動(dòng)來(lái)管理內(nèi)存的申請(qǐng)和釋放的(malloc和free函數(shù))斤程;
自動(dòng)管理內(nèi)存:比如Java角寸、JavaScript、Python、Swift袭厂、Dart等墨吓,它們有自動(dòng)幫助我們管理內(nèi)存;
對(duì)于開(kāi)發(fā)者來(lái)說(shuō)纹磺,JavaScript 的內(nèi)存管理是自動(dòng)的帖烘、無(wú)形的。
我們創(chuàng)建的原始值橄杨、對(duì)象秘症、函數(shù)……這一切都會(huì)占用內(nèi)存;
但是我們并不需要手動(dòng)來(lái)對(duì)它們進(jìn)行管理式矫,JavaScript引擎會(huì)幫助我們處理好它乡摹;
JavaScript會(huì)在定義數(shù)據(jù)時(shí)為我們分配內(nèi)存。
但是內(nèi)存分配方式是一樣的嗎采转?
JS對(duì)于原始數(shù)據(jù)類(lèi)型內(nèi)存的分配會(huì)在執(zhí)行時(shí)聪廉,
直接在棧空間進(jìn)行分配故慈;
JS對(duì)于復(fù)雜數(shù)據(jù)類(lèi)型內(nèi)存的分配會(huì)在堆內(nèi)存中
開(kāi)辟一塊空間板熊,并且將這塊空間的指針?lè)祷刂?/p>
變量引用;