欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

復制代碼 代碼如下:

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

因為后插入的兩個數(shù)的key過于離散,所以它們被保存到hash表中。最終tb的大小為4+2=6。
這時我們對table進行刪除操作:

復制代碼 代碼如下:

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設為nil,然后等垃圾收集或強制執(zhí)行一次垃圾收集(collectgarbage)。

第二種:

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

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

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

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

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

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

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

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

PS:為什么用一個老key沒效果呢?這是因為老key對應的table空間還在,lua會直接使用老空間而不去計算新空間。

相關文章

  • 編寫高性能Lua代碼的方法

    編寫高性能Lua代碼的方法

    這篇文章主要介紹了編寫高性能Lua代碼的方法,本文是基于Lua語言的創(chuàng)造者Roberto Ierusalimschy的一篇文章翻譯改寫而來,需要的朋友可以參考下
    2014-10-10
  • Lua中使用元表(metatable)執(zhí)行算術類元方法實例

    Lua中使用元表(metatable)執(zhí)行算術類元方法實例

    這篇文章主要介紹了Lua中使用元表(metatable)執(zhí)行算術類元方法實例,本文給出了加法、減法、乘法、除法、相反數(shù)、取模等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua學習筆記之數(shù)據(jù)結構

    Lua學習筆記之數(shù)據(jù)結構

    這篇文章主要介紹了Lua學習筆記之數(shù)據(jù)結構,本文講解了數(shù)組、矩陣、鏈表、隊列等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • lua獲取未來某時間點的時間戳解決方案

    lua獲取未來某時間點的時間戳解決方案

    這篇文章主要介紹了lua獲取未來某時間點的時間戳解決方案,需要的朋友可以參考下
    2014-12-12
  • Lua實現(xiàn)split函數(shù)

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

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

    Lua中實現(xiàn)php的strpos()以及strrpos()函數(shù)

    這篇文章主要介紹了在Lua中實現(xiàn)php的strpos()以及strrpos()函數(shù)的方法,需要的朋友可以參考下
    2014-11-11
  • Lua基礎教程之表(Table)學習筆記

    Lua基礎教程之表(Table)學習筆記

    這篇文章主要介紹了Lua基礎教程之表(Table)學習筆記,本文來自個人總結,需要的朋友可以參考下
    2014-09-09
  • Lua面向對象編程之基礎結構table簡例

    Lua面向對象編程之基礎結構table簡例

    今天小編就為大家分享一篇關于Lua面向對象編程之基礎結構table簡例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Lua中的變量和流控制入門學習

    Lua中的變量和流控制入門學習

    這篇文章主要介紹了Lua中的變量和流控制入門學習,其中--兩個橫線開始單行的注釋,--[[加上兩個[和]表示多行的注釋--]],需要的朋友可以參考下
    2015-07-07
  • Golang使用ChatGPT生成單元測試實踐

    Golang使用ChatGPT生成單元測試實踐

    這篇文章主要為大家介紹了Golang使用ChatGPT生成單元測試實踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論