Lua / сопрограммы Как измерить, сколько занимают стандартные функции памяти - PullRequest
0 голосов
/ 22 февраля 2020

В настоящее время я пытаюсь найти способ вернуть значение stati c, которое представляло бы, сколько памяти занимает функция или время ее выполнения (как поток stati c), я подумал об использовании сопрограмм Однако я не могу сделать никаких рабочих прототипов, спасибо за помощь заранее! (

1 Ответ

0 голосов
/ 22 февраля 2020

Функция Lua collectgarbage со строкой "count" в качестве аргумента возвращает число, которое отражает объем памяти, используемый в данный момент интерпретатором. Вот ссылка на пример и дополнительную информацию; Я воспроизведу пример здесь:

function memuse()
    local i = math.modf(collectgarbage("count") * 1024)
    return i
end

Эта функция возвращает объем памяти в килобайтах, используемый в настоящее время Lua.

Что касается времени, самый простой способ - это вызов os.time(), который возвращает текущее системное время. Обратите внимание, что это только возвращает количество секунд до ближайшего целого числа. Если вам нужна более высокая точность, есть несколько вариантов: во-первых, сделать системный вызов с io.popen, чтобы получить текущее системное время, которое включает нецелую часть; или два, реализуйте некоторые связанные с временем функции в C / C ++ и вызывайте их из Lua. Я использовал оба варианта, и второй дает превосходную точность, но для простоты я просто покажу первый.

-- Function called 'tick' to retrieve the current OS time.
function tick()
    local fil = assert(io.popen("date +%s.%N"))
    local str = fil:read("*all")
    return tonumber(str)
end

Lua файловые дескрипторы - один из которых производится вызов io.popen - иметь свои собственные деструкторы, поэтому их не нужно явно закрывать; однако вы можете захотеть вызвать fil:close() для сбора мусора и избежания любых ошибок, связанных с открытым файлом.

Если вы хотите воспользоваться вторым, более сложным вариантом, я предлагаю создать класс таймера в C ++, который использует библиотеку chrono для получения системного времени.

Я не уверен, что эти две функции имеют отношение к вам, но я надеюсь, что они помогут.

...