Почему память кучи lua увеличивается в этом сценарии при вызове collectgarbage («count») - PullRequest
1 голос
/ 09 ноября 2019

Запустите следующий код lua:

collectgarbage("collect")
collectgarbage("stop")

local a,b = {},{}

local m0 = collectgarbage("count")
local m1 = collectgarbage("count")
local m2 = collectgarbage("count")
local m3 = collectgarbage("count")
local m4 = collectgarbage("count")

print(m0 * 1024)
print(m1 * 1024)
print(m2 * 1024)
print(m3 * 1024)
print(m4 * 1024)

, и я получил это:

23907.0
23907.0
23907.0
24515.0
24515.0

С Lua 5.3 и OSX Mojave.

Я запутался, почемуиспользование памяти увеличивается после трехкратного вызова collectgarbage("count").

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Выполнение последовательности вызовов collectgarbage() включает поиск этой функции в таблице глобальной среды и размещение ее в стеке вместе со строковым аргументом. Lua помещает collectgarbage отчеты в стек состояния виртуальной машины.

Стек должен расти, чтобы вместить в него новые значения, и, в зависимости от текущей емкости стека, может быть достаточно места для всех этих действий. сделано без перераспределения стека, иначе потребуется расширить стек, предоставляя вам отчеты о разном объеме памяти.

Попробуйте вставить print "grab stats" в строку перед первым вызовом collectgarbage("count"), после создания таблиц. Вероятно, вы вообще не увидите изменений размера памяти.

0 голосов
/ 09 ноября 2019

Каждый отпечаток преобразует число для печати в строку. Этим новым строкам нужна память.

...