最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年04月23日 10:58:36   投稿:junjie  
這篇文章主要介紹了Lua中釋放table占用內(nèi)存的方法,本文講解了兩種釋放內(nèi)存的方法,需要的朋友可以參考下

table的大小是動態(tài)變化的??慈缦麓a:

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

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

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

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

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

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

第一種:

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

第二種:

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Lua select函數(shù)用法實(shí)例

    Lua select函數(shù)用法實(shí)例

    這篇文章主要介紹了Lua select函數(shù)用法實(shí)例,本文直接給出代碼實(shí)例,并講解了select函數(shù)的使用技巧,需要的朋友可以參考下
    2015-04-04
  • lua中操作json數(shù)據(jù)的方法

    lua中操作json數(shù)據(jù)的方法

    這篇文章主要介紹了lua中操作json數(shù)據(jù)的方法,本文講解使用cjson包操作JSON數(shù)據(jù),并給出了操作實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識整理

    Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識整理

    函數(shù)在面對對象的編程中又被叫做方法,會受到作用域的制約,Lua中具有類等面向?qū)ο蟮奶匦?接下來我們就來看一下Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識整理
    2016-06-06
  • Nginx+lua 實(shí)現(xiàn)調(diào)用.so文件

    Nginx+lua 實(shí)現(xiàn)調(diào)用.so文件

    本文給大家分享的是Nginx結(jié)合lua 實(shí)現(xiàn)調(diào)用.so動態(tài)鏈接庫文件的方法和示例,有需要的小伙伴可以參考下
    2017-05-05
  • Lua的內(nèi)存管理淺析

    Lua的內(nèi)存管理淺析

    這篇文章主要介紹了Lua的內(nèi)存管理淺析,本文講解了內(nèi)存管理的相關(guān)知識,同時講解了垃圾收集器的機(jī)制,需要的朋友可以參考下
    2014-09-09
  • Lua中的數(shù)學(xué)庫總結(jié)

    Lua中的數(shù)學(xué)庫總結(jié)

    這篇文章主要介紹了Lua中的數(shù)學(xué)庫總結(jié),本文羅列了Lua5.1中數(shù)學(xué)庫的所有函數(shù),需要的朋友可以參考下
    2014-11-11
  • Lua實(shí)現(xiàn)split函數(shù)

    Lua實(shí)現(xiàn)split函數(shù)

    這篇文章主要介紹了Lua實(shí)現(xiàn)split函數(shù),lua中沒有split分割字條串函數(shù),本文使用自定義函數(shù)實(shí)現(xiàn),需要的朋友可以參考下
    2015-04-04
  • Lua腳本語言簡介

    Lua腳本語言簡介

    這篇文章主要介紹了Lua腳本語言簡介,Lua最著名的應(yīng)用是在暴雪公司的網(wǎng)絡(luò)游戲WOW中, Lua腳本可以很容易的被C/C++代碼調(diào)用,也可以反過來調(diào)用C/C++的函數(shù),這使得Lua在應(yīng)用程序中可以被廣泛應(yīng)用,本文就是對Lua語言的詳細(xì)介紹,需要的朋友可以參考下
    2014-09-09
  • Lua math.fmod使用時的小數(shù)問題

    Lua math.fmod使用時的小數(shù)問題

    這篇文章主要介紹了Lua math.fmod使用時的小數(shù)問題,math.fmod用于取模運(yùn)算,使用小數(shù)時可能會遇到不可預(yù)料的結(jié)果,所以應(yīng)該避免使用小數(shù),需要的朋友可以參考下
    2015-06-06
  • 詳解Lua中的變量相關(guān)知識點(diǎn)

    詳解Lua中的變量相關(guān)知識點(diǎn)

    這篇文章主要介紹了Lua中的變量相關(guān)知識點(diǎn),是Lua入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論

承德县| 尚志市| 宣威市| 荥阳市| 台东县| 客服| 峨眉山市| 颍上县| 信宜市| 阳新县| 中方县| 上饶县| 达日县| 五寨县| 阿拉善左旗| 黔江区| 浦城县| 焉耆| 宁南县| 河津市| 乌海市| 富川| 双牌县| 徐州市| 甘德县| 沙河市| 江口县| 淮南市| 馆陶县| 泗洪县| 鄂伦春自治旗| 吕梁市| 镇平县| 辽阳县| 德钦县| 山西省| 潍坊市| 永仁县| 清水河县| 南江县| 岚皋县|