我有一个单线程的嵌入式应用程序,可以分配和释放大量的小块(32-64b).基于缓存的分配器的完美方案.虽然我可以尝试写一个,但这可能是浪费时间,而不是像一些已经在前线的解决方案那样经过测试和调整.
那么我可以用于这种情况的最佳分配器是什么?
注意:我在系统中使用Lua虚拟机(这是80%以上的分配的罪魁祸首),所以我不能轻易地重构我的代码以使用堆栈分配来提高分配性能.
我正在阅读很多十六进制数据行.它们以字符串形式出现,我将它们解析为line_codes,告诉我如何处理其余数据.一行设置地址的最重要字(MSW),另一行设置最低有效字(LSW).
然后我需要将它们连接在一起,这样如果MSW ="00ff"并且LSW ="f10a"地址将是00fff10a.
这一切都很好,但后来我应该检查地址是否在某组值之间:
if address <= "007FFFh" and address >= "000200h" then
print "I'm in"
end
Run Code Online (Sandbox Code Playgroud)
大家都知道,Lua并不喜欢这个,因为它使用<=和>=使用字符串时会出错.
如果有一种方法我可以将字符串转换为十六进制,这样"FFFF"将变为0xFFFF?
我正在尝试创建一个调试打印函数,它将文件句柄作为第一个参数.首先,我写一个这样的函数:
function fprint (f, ...)
for i, v in ipairs{...} do
f:write(tostring(v))
f:write("\t")
end
f:write("\n")
end
Run Code Online (Sandbox Code Playgroud)
只要我不在nil参数中传递值,此函数就可以工作.但是,如果我用a调用nil它,它不会打印nil值和其余参数.
fprint(io.stderr, 1, 2, nil, 3)
=> prints only 1 and 2
Run Code Online (Sandbox Code Playgroud)
那么,解决这个问题的正确方法是什么?
在我的Lua脚本中,我正在尝试使用可变数量的参数创建一个函数.据我所知它应该像下面这样工作,但不知怎的,我在TI-NSpire上得到了Lua 5.1的错误(全局arg是零).我究竟做错了什么?谢谢!
function equation:init(...)
self.equation = arg[1]
self.answers = {}
self.pipe = {arg[1]}
self.selected = 1
-- Loop arguments to add answers.
for i = 2, #arg do
table.insert(self.answers, arg[i])
end
end
instance = equation({"x^2+8=12", -4, 4})
Run Code Online (Sandbox Code Playgroud) 我有一个C++应用程序(用于OS X),它将lua称为脚本语言.我正在运行大量这些应用程序(100s),它们可以运行很长时间(几天或几周).
有时会崩溃.当它崩溃时,它留下了一个可爱的核心文件.
我可以在gdb中打开这个核心文件,找到应用程序崩溃的位置.我可以遍历调用堆栈并找到lua_State变量的实例.我的问题是,我想看看这个时候lua调用堆栈的样子......
请记住,由于这是一个核心,我无权调用C函数,它排除了几种调试lua脚本的常用方法.
我想避免通过调试钩子添加手动跟踪,因为我担心额外的性能损失,并增加了复杂性.
如何遍历lua内部结构以获取调用堆栈信息?
我正在使用Corona SDK将数据发布到我的C#服务器:
headers["Content-Type"] = "application/x-www-form-urlencoded"
headers["Accept-Language"] = "en-US"
local body = "color=red&size=small"
local params = {}
params.headers = headers
params.body = body
network.request( host .. "/UpdateHand", "POST", nwListener, params )
Run Code Online (Sandbox Code Playgroud)
我在服务器上收到一条消息:
Post["/UpdateHand"] = x =>
{
Console.WriteLine("Received ...");
return "Ok";
};
Run Code Online (Sandbox Code Playgroud)
但是当我检查数据时(当我在其上放置一个断点)时,我看不到我的数据所在的位置(即params.body或params.headers).我该如何提取这些信息?
我应该根据Corona上的文档正确发布它:http://docs.coronalabs.com/daily/api/library/network/request.html
我在我的终端上安装了yadr,但是当我打开Vim时,我一直收到以下错误:
neocomplete does not work this version of Vim.
It requires "if_lua" enabled Vim(7.3.885 or above).
Run Code Online (Sandbox Code Playgroud)
编辑:
只是一个直接的初学者问题,我正在为Garrys Mod编写Lua的东西,通过阅读维基和其他编码来学习.
if (self.Owner:SteamID( ) == "STEAM_0:1:44037488" ) then
Run Code Online (Sandbox Code Playgroud)
以上是我想要使用的代码,检查STEAM ID(我相信是一个字符串)是否等于我的确切字符串.
这可行吗?或者我还有另一种方法吗?
可能很简单,但我想知道〜=运算符在lua中是什么意思,就像在
if x ~= params then
Run Code Online (Sandbox Code Playgroud)
搜索但没有找到任何东西.
我有一个key => value表我想在Lua中排序.键都是整数,但不是连续的(并且有意义).Lua唯一的排序函数似乎是table.sort,它将表视为简单数组,丢弃原始密钥及其与特定项的关联.相反,我基本上希望能够使用PHP的asort()功能.
是)我有的:
items = {
[1004] = "foo",
[1234] = "bar",
[3188] = "baz",
[7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)
排序操作后我想要的是:
items = {
[1234] = "bar",
[3188] = "baz",
[1004] = "foo",
[7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:根据答案,我将假设它只是我正在使用的特定嵌入式Lua解释器的一个奇怪的怪癖,但在我的所有测试中,pairs()总是按照它们被添加到的顺序返回表项桌子.(即上述两个声明将以不同方式迭代).
不幸的是,因为这不是正常的行为,看起来我无法得到我需要的东西; Lua没有内置的必要工具(当然),嵌入式环境对我来说太有限了.
不过,谢谢你的帮助!