Lua / 协程 如何测量标准函数占用的内存

我目前正在尝试找到一种方法来返回一个静态值,该值表示标准函数占用的内存或其执行的时间(作为静态线程),我想过使用协程,但我无法制作任何工作原型,在此先感谢您的帮助!(:

点赞
用户9922866
用户9922866

Lua 函数 collectgarbage 和字符串 "count" 作为参数返回一个数字,反映解释器当前使用的内存量。这里有一个链接提供示例和更多信息;我将在此重现例子:

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

该函数返回当前 Lua 使用的内存量,以千字节为单位。

至于时间,最简单的方法是调用 os.time(),它返回当前系统时间。但请注意,它仅返回最接近的整数秒数。如果需要更高的精度,有几种选择:一种是使用 io.popen 进行系统调用以检索当前系统时间,其中包括非整数部分;或者实现一些与时间相关的 C/C++ 函数并从 Lua 中调用它们。我都用过,第二种方式产生了极高的精度,但为了简单起见,我只展示第一种方式。

-- 函数名为 'tick' ,以检索当前 OS 时间。
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 库检索系统时间。

我不确定这两个函数对您有多大帮助,但我希望它们能有所帮助。

2020-02-22 00:19:13