加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何增加内存来处理超大Lua表

发布时间:2020-12-14 02:11:13 所属栏目:Windows 来源:网络整理
导读:我有一个Lua函数,给定n,生成从1到n的系列的所有排列,并以表格形式将每个唯一系列存储在容器表中. 这个生成的表的大小非常快(并且必然如此).关于我尝试n = 11的时间,脚本将运行几秒钟,然后失败到“lua:没有足够的内存”.我有16GB的物理RAM,但是在Windows任务
我有一个Lua函数,给定n,生成从1到n的系列的所有排列,并以表格形式将每个唯一系列存储在容器表中.

这个生成的表的大小非常快(并且必然如此).关于我尝试n = 11的时间,脚本将运行几秒钟,然后失败到“lua:没有足够的内存”.我有16GB的物理RAM,但是在Windows任务管理器中观察性能监视器可以让我在运行时看到ram被消耗,并且在脚本以内存错误结束之前它只会达到大约20%.

我发现这篇帖子看起来像我需要的方向:memory of a process in Lua

由于我使用Lua.exe运行我的脚本,我假设我仅限于Windows为Lua.exe分配的内存量.我可以增加这笔金额吗?我可以使用C#包装器程序来简单地运行Lua脚本(这个想法是它将具有更高/更少限制的内存分配)?还是我在朝错误的方向看?

解决方法

您需要提前存储所有排列吗?您可以在运行中生成它们.

例:

local function genPerm(self,i)
  local result = {}
  local f = 1
  for j = 1,self.n do
    f = f * j
    table.insert(result,j)
  end
  for j = 1,self.n-1 do
    f = f / (self.n + 1 - j)
    local k = math.floor((i - 1) / f)
    table.insert(result,j,table.remove(result,j+k))
    i = i - k * f
  end
  return result
end

local function perms(n)
  return setmetatable({n=n},{__index=genPerm})
end

local generator = perms(11)
for _,i in ipairs {1,42,1000000,39916800} do
  print(table.concat(generator[i],','))
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读