我试图使用自定义分配函数来控制Lua使用的内存量,但由于某种原因,我得到一个COMException,而Lua试图释放内存,说一个参数无效(HRESULT: 0x80000003),如果我让创建和扩展字符串的脚本运行几秒钟。这是我的自定义分配功能:
private static IntPtr Alloc(IntPtr ud, IntPtr ptr, int osize, int nsize)
{
if (nsize == 0)
{
Marshal.FreeHGlobal(ptr);
return IntPtr.Zero;
}
else
{
if (osize == 0)
return Marshal.AllocHGlobal(nsize);
else
return Marshal.ReAllocHGlobal(ptr, (IntPtr)nsize);
}
}
没有什么特别之处,我只是用lua_setallocf
设置该函数,然后开始在循环中创建和连接字符串,以引起内存更改。在托管C ++中也会发生同样的事情,使用realloc和free,虽然我不知道那些是否真的在幕后做同样的事情。
如果我使用Lua的股票分配功能,一切正常。有没有人知道可能导致这种情况的原因?
更新: 我刚刚发现这只发生在使用 LuaJit ,而不是官方的Lua 5.1二进制文件......