關於lua table重複定義相同內容對記憶體的影響

2021-10-07 16:48:54 字數 1307 閱讀 5882

首先看乙個問題,假如乙個table如下:

local acty =

如果此時這樣操作,對記憶體會有什麼影響?

acty.init =

function()

acty.id =

2end

定義以下內容

local function onparse

(acty)

acty.init =

function()

acty.id =

1 end

return acty

endlocal function test()

acty =

endtest

()

此時記憶體占用1565.498046875k

接下裡,連續對acty進行parse,記憶體占用分別是

--

1565.69921875k

local function test()

acty =

acty =

onparse

(acty)

end--

1565.765625k

local function test()

acty =

acty =

onparse

(acty)

acty =

onparse

(acty)

end--

1566.296875k

local function test()

acty =

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

acty =

onparse

(acty)

end

可以看出每次執行都進行了記憶體分配。

所以小夥伴以後寫的時候一定注意,如果要更新內容,可以table內部定義update方法,外部直接呼叫即可。

關於重複定義 LNK2005

有時候會見到同事寫的 中,標頭檔案一開啟就有如下格式 ifndef define 正文 endif 當時看不出有什麼意義,於是也就不明白為什麼這麼寫了,就這樣讓它做為乙個高階的存在放在記憶裡 今天它從神壇上掉了下來 原來它是意義僅僅是替換 pragma once,然而標頭檔案中都包含此句 omg 這...

轉 關於lua table是否為空的判斷

在專案的指令碼lua中經常有這樣的需求,1 local a 2 對a進行處理 3 對a是否為空表進行判斷 關於對a是否為空表的判斷,我發現有些 如此做 if a then 這樣的結果就是a 永遠返回false,是乙個邏輯錯誤。因為這裡比較的是table a和乙個匿名table的記憶體位址。也有些 如...

c 重複定義

今天測試了一下c 下重複定義會出現什麼問題,使用gcc和vs2010做了測試,兩者的測試結果一樣 一共有5個檔案,2個頭檔案,3個cpp檔案。內容分別如下 ifndef redefine0 h define redefine0 h includeusing namespace std 變數宣告和定義...