Memory Lua/corroutines如何度量标准函数占用的内存量

Memory Lua/corroutines如何度量标准函数占用的内存量,memory,memory-management,lua,stack,coroutine,Memory,Memory Management,Lua,Stack,Coroutine,我目前正试图找到一种方法来返回一个静态值,该值表示一个函数需要多少内存或它的执行时间(作为一个静态线程),我考虑过使用协程,但是我无法制作任何工作原型,提前感谢您的帮助!(:Lua函数collectgarbage,以字符串“count”作为参数,返回一个反映解释器当前使用的内存量的数字。下面是一个示例和更多信息的示例;我将在这里重现该示例: function memuse() local i = math.modf(collectgarbage("count") * 1024)

我目前正试图找到一种方法来返回一个静态值,该值表示一个函数需要多少内存或它的执行时间(作为一个静态线程),我考虑过使用协程,但是我无法制作任何工作原型,提前感谢您的帮助!(:

Lua函数
collectgarbage
,以字符串
“count”
作为参数,返回一个反映解释器当前使用的内存量的数字。下面是一个示例和更多信息的示例;我将在这里重现该示例:

function memuse()
    local i = math.modf(collectgarbage("count") * 1024)
    return i
end
此函数返回Lua当前使用的内存量(以KB为单位)

至于时间,最简单的方法是调用
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++中创建一个计时器类,它使用<代码>计时> <代码>库来检索系统时间。


我不确定这两个功能是否与您相关,但我希望它们对您有所帮助。

您对“静态”一词的使用让我想到了C/C++。你是用Lua的C API实现的吗?很抱歉,我想说的是,我需要检索一个常量值,这个常量值不会随上下文的变化而变化,以便能够进行一些基准测试。谢谢你的回答,我真的很感激。实际上,我知道检索内存之类的函数,但是更确切地说,我想做的是(我不知道怎么做)返回一个随机函数使用的内存使用率的常量值,我计划将其用作迂回查找器,例如检查debug.getinfo通常应该使用的内存使用率,然后通过与marge进行比较来找到迂回的函数。因为现在对一个函数使用垃圾收集返回两个完全不同的nt如果多次启动就会产生结果。@Alexandra我对Lua调试库的了解是我所缺乏的,但据我所知,
debug.getinfo
提供了有关函数的UPValue数量的信息,但没有给出函数实际消耗的内存量。当查看C--Lua的实现lan时语言——没有办法知道函数的大小,除非你绝对肯定地知道两个函数在内存中是连续的,因此可以使用指针计算一个函数的大小。基于此,我不知道是否有可能找到Lua函数使用的内存量。