麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

Lua中釋放table占用內(nèi)存的方法

2024-07-21 23:04:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

table的大小是動(dòng)態(tài)變化的。看如下代碼:

 

復(fù)制代碼 代碼如下:

tb = {1,2,3} --數(shù)組大小4,hash表大小1(不管hash表有沒(méi)有存數(shù)據(jù),它的大小最小為1) 
 
tb[5] = 5 
tb[100] = 100 --數(shù)組大小4,hash表大小2 

因?yàn)楹蟛迦氲膬蓚€(gè)數(shù)的key過(guò)于離散,所以它們被保存到hash表中。最終tb的大小為4+2=6。
這時(shí)我們對(duì)table進(jìn)行刪除操作:

 

 

復(fù)制代碼 代碼如下:

tb[1] = nil 
tb[2] = nil 
tb[3] = nil 
tb[5] = nil 
tb[100] = nil 

 

這時(shí)tb里面沒(méi)有數(shù)據(jù)了,但tb的大小還是6,tb占用的內(nèi)存空間并沒(méi)有釋放!
這里提供兩種方式來(lái)釋放tb所占的內(nèi)存空間。

第一種:

將tb設(shè)為nil,然后等垃圾收集或強(qiáng)制執(zhí)行一次垃圾收集(collectgarbage)。

第二種:

用一個(gè)之前沒(méi)用過(guò)的key對(duì)tb的內(nèi)容賦nil值。要找一個(gè)未使用過(guò)的key很簡(jiǎn)單,直接構(gòu)造一個(gè)table當(dāng)key就可以了,比如tb[{}]=nil。

第一種是正規(guī)的做法,第二種只是一種演示,不實(shí)用。

下面解釋一下第二種方法為什么能釋放table占用的內(nèi)存空間。

只有兩種情況會(huì)設(shè)置table的大小,一種是構(gòu)造table的時(shí)候,一種是用一個(gè)新key向table插入一個(gè)值的時(shí)候。

前者不用解釋,那是必須的。后者是為了提高table中array的利用率而進(jìn)行的優(yōu)化。

當(dāng)向table插入一個(gè)新值時(shí),lua會(huì)計(jì)算新值插入后整個(gè)table中array與hash的情況(有些值被設(shè)nil,有些值從hash移到array),

重新計(jì)算變化后的table,算出新的array與hash的大小,重新分配空間。

所以,盡管上面tb中的所有值都是nil,但由于沒(méi)有向table插入一個(gè)新值,沒(méi)有觸發(fā)table的重新分配,所以空間并沒(méi)有釋放。

PS:為什么用一個(gè)老key沒(méi)效果呢?這是因?yàn)槔蟢ey對(duì)應(yīng)的table空間還在,lua會(huì)直接使用老空間而不去計(jì)算新空間。

 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产欧美在线一区二区三区 | 爽爽视频免费看 | 久久一本日日摸夜夜添 | 9797色 | 久久久久久久久国产 | 西川av在线一区二区三区 | 特级无码毛片免费视频尤物 | 秋霞a级毛片在线看 | av电影免费看 | 一级网站 | 手机国产乱子伦精品视频 | 精品久久中文网址 | 激情午夜天| 国产精品剧情一区二区在线观看 | 久久久久久久久国产 | 看a级毛片 | 美女色影院 | 爱视频福利 | 日本视频网 | 精品一区二区在线观看 | 久久久99精品视频 | 亚洲精品午夜国产va久久成人 | 香蕉视频1024 | 日本在线免费观看视频 | fc2成人免费人成在线观看播放 | 久久国产精品系列 | 日韩毛片网站 | 欧美日韩在线播放一区 | 福利免费观看 | 日日狠狠久久偷偷四色综合免费 | 成人勉费视频 | 大学生一级毛片在线视频 | 成人短视频在线观看免费 | 九九热视频免费观看 | 中国久久久 | 欧美第1页 | hd极品free性xxx一护士 | 免费看污视频在线观看 | 一级空姐毛片 | 久久超碰99| 国产亚洲精品久久午夜玫瑰园 |