找回密码
 注册帐号
搜索
楼主: cl2016

[提问] 玩洛奇的时候有时就会提示Not enough memory

[复制链接]
发表于 2020.3.15 05:18 | 显示全部楼层
今天重装了新系统 过几天看看效果。如果解决了 就是系统版本问题。
如果没解决 。那就是洛奇优化问题。
发表于 2020.3.15 11:50 | 显示全部楼层
虚拟内存设定问题吗 就算物理内存够用 有的虚拟内存没设也会出问题
发表于 2020.3.15 17:23 | 显示全部楼层
本帖最后由 鸡蛋甲 于 2020.3.15 21:42 编辑

解决方法暂无
但可通过自动释放内存软件,如内存释放专家(MemEmpty)
通过设置内存补丁MLP及其扩展tin/koorimio的部分设置,来进行调整参数,从而避开部分会产生lag的动态dll进程

目标内存不足(Not enough memory),指的不是你电脑里的内存空间,具体的往下看

你所持有的物理内存,32G内存,此为物理上可临时储存进程数据的第一阶段限制

然而:内存泄漏才是主要原因

    在启动洛奇时,从硬盘加载至内存内的数据,会通过OS自动分配给洛奇这个程序一定大小的内存额度。通常在1.5~2GB左右(此为静态内存)并且不会大于这个值。以便随时调取游戏资源,加快载入速度。(此项目可在任务管理器中查看 Ctrl+Alt+Delet)
    紧接着,启动程序时所配给的内存额度中有CPU工作时所需的静态进程/数据(static method),那么CPU会根据需要,将内存中的进程数据/储存至CPU的高速缓存器中(cache memory)以便读取运行。

    编程过C语言以及其他需要针对内存进行动态保存动态进程/数据(如malloc函数)都应该知道:在获取动态内存后,需要释放内存,以免内存过载导致系统崩溃。
    在进行游戏的过程中,会触发某些不可预计的行为进程,且重复次数皆不明,此时就需要确保动态内存,来进行不断的加载。
此时CPU就会新生成一个动态进程/数据,并存放在内存中,然后就会消耗OS分配给程序的(动态)内存额度,但为了避免内存不足导致无法载入,OS首先会针对所运行的程序进行额度调配(假设洛奇的额度为1.5GB,超过这个限制就会引发内存不足),此为第二阶段限制


    而动态内存在确保的时候,需要通过内存管理进行申请,申请失败会返回失败信息,当失败信息堆积到一定量时,就会触发系统性的强制措施,就是楼主的图。此为第三阶段限制


为了保证动态内存时刻充足,需要进行内存释放,通常是程序写好的寻找内存地址并释放内存指令(如通过 free()函数)。但也可以手动释放。在进程长时间执行时,很有可能无法脱离循环条件导致CPU读取不到释放指令,从而引起动态内存地址丢失,甚至是大量堆积,从而引起内存不足。程序也可以通过释放无用的静态进程以拓宽可以内存容量来确保动态内存的载入。

何为动态内存:用文件打比方:
     当你【获取文件A,获取3次】时,在内存上,会在3个地址000x16 001x16 002x16 上存放A文件。此时的000~002地址上的文件为静态文件,关闭程序时自动清除,除非获取的总文件超过物理内存上限。
     当你想【获取文件A,但获取次数未知】时,在内存上,首先会在地址000x16上存放A文件,并在该地址上记录为1(占用状态)。当用户说【还不够,再次获取文件A】时,继续在内存001x16上存放A文件。紧接着是002x16。003x16……fffx16。
     如果在007x16(第8次获取)时,满足了需要,那么所分配的内存会通过释放指令清除内存上的文件A相关,通过【清除000x16上的文件】指令,即可释放000x16上的A文件。并重复执行【清除001x16上的文件】、【清除002x16上的文件】……【清除007x16上的文件】后,该地址上记录为0(非占用状态),即可重复利用内存。

    但实际上,动态分配内存是随机性的,在进行第一次【获取文件A,获取次数未知】时,很有可能是直接存放在 f54x16 地址上,且第二次的【获取文件A,获取次数未知】时,也未必是存放在 f55x16 地址上。所以需要记录地址。
    此时,需要修正为【获取文件A,获取次数未知,但记录当前文件地址到Log上】,然后你就知道了文件A是在f54x16上,而不是000x16上。
    于此同时【清除f54x16上的文件】就变得可行了。

何为动态内存:用生活用品打比方:
你安装的内存(即架子有100个抽屉),然后由OS给你管理提供了共计10个抽屉供你存放物品,每个抽屉只能存放一个物品。抽屉编号1~10。
你估计会问:为什么有100个抽屉,你就给我分配10个?!
因为:其他抽屉还需要给其他程序预留。

你只能告诉OS指令:存放什么;从指定抽屉里取出什么(如果抽屉为空,则返回null)。无法指示OS存放到指定的抽屉内。
静态进程/数据:即我要存放7个苹果放进抽屉内。(动作-存放;物品-苹果;数量-7个)
动态进程/数据:即我要存放香蕉到抽屉里。(动作-存放;物品-香蕉;数量-未知)

在执行静态的时候,内存按照顺序存放了7个苹果到抽屉编号1~7里。(抽屉1~7被占用)
1
2
3
4
5
6
7
8
9
10
苹果
苹果
苹果
苹果
苹果
苹果
苹果




在执行动态的时候,用户说:“我要存1个香蕉!”,内存随机存放香蕉到6号抽屉里(随机存放)。(抽屉6被占用)
1
2
3
4
5
6
7
8
9
10
香蕉

“我要继续存1个梨!”时,内存自动存放香蕉到4号抽屉里(随机找寻空余空间并存放)。(抽屉4,6被占用)
1
2
3
4
5
6
7
8
9
10




香蕉





“这次我要存4个西瓜!”时,内存自动存放香蕉到7,8,9,10号抽屉里(尽可能找寻连续的空余空间)。(抽屉4,6~10被占用)
1
2
3
4
5
6
7
8
9
10




香蕉
西瓜
西瓜
西瓜
西瓜

那么此时,用户说:“这次我要存5个柠檬”时,会怎样?
抽屉数量不够,那么,你就需要取出一只香蕉,但是,当时存放的时候你根本不知道香蕉放在哪个抽屉里时,你很有可能开的抽屉是空的或是其他水果,此时造成所谓的“内存泄漏”,你应该在当时存放香蕉/梨/西瓜的时候,记录下来位置才行。

记录位置有2种方式:
1. 物品存放的位置由OS管理,并由OS取出。(即,呼叫OS取出香蕉,那OS就会自动给你取出香蕉)
2. 物品存放的位置记录在用户提供的账本上(C语言为 int*型,地址指向型),直接观察账本让OS取出。

此时,你可以叫OS执行取出香蕉的指令了:
“帮我取出香蕉!”
“帮我取出(香蕉)记录在这个位置上的物品!”
1
2
3
4
5
6
7
8
9
10





西瓜
西瓜
西瓜
西瓜

此时你现在有5个剩余空间了就能存放了。
1
2
3
4
5
6
7
8
9
10
柠檬
柠檬
柠檬
柠檬
柠檬
西瓜
西瓜
西瓜
西瓜

现在抽屉已经满了,如果你想要继续存放必须拿出抽屉内的东西。

如果继续执行存放,则会引起OS的警告!


所以我推测:
1. 恶魔猫遗漏了某进程的内存地址address,亦或是释放free进程因某些原因导致无法载入。
2. 恶魔猫在需要进行无限循环时,加入了需要确保动态的进程,且无论是否在脱离循环时释放内存。
3. 恶魔猫在多线程处理时,针对同一动态进程进行复数执行。

这些问题就交给掌握了汇编语言的人去看内存进行排查,亦或是掌握源码的程序员进行排查,我无能为力。

最后,楼主你这32G最多也就仅能支持32开罢了,内存多是挺好,但太多压根没啥软用。关键在于OS到底给你的内存额度是多少。

毕竟,洛奇是个只要能顺畅运行office办公软件的就能运行的超级低配游戏








点评

看了半天香蕉西瓜然后看饿了.....大佬666!  发表于 2020.11.11 00:31
非常感谢!谢谢提醒。标题已经改了!  发表于 2020.3.16 20:15
谢谢鸡蛋大大!!感恩!!!  发表于 2020.3.16 02:22
谢大佬指点。我现在下载给内存专家试试  发表于 2020.3.16 00:24
很好很详细,赞一个。洛奇这游戏太老了,和现在的系统不兼容出现各种问题也真是不奇怪。  发表于 2020.3.15 20:23
发表于 2020.3.15 19:59 | 显示全部楼层
本帖最后由 眠之黑 于 2020.3.16 00:20 编辑

昨天 换了WIN10 专业版 系统。
经过24小时洛奇暂时没事。之前因为错误安装了 校园版。
LZ看看你的WIN系统 是什么版本。 我另外3台电脑 WIN7是没出现这种内存错误问题。所以我在想是WIN10 兼容问题

现在怀疑猜测
1:W10 非专业版(验证还是报错)
2:硬件问题CPU问题。比如我现在出问题是I9 990K 。I9内存上是有缺陷

点评

我也是I9 9900K。原来老电脑是win7·快10年了没出过这问题- -现在还了WIN10还出现这毛病。  发表于 2020.3.16 20:23
我之前老电脑也是一直好好的从来没出现过这样。新电脑装了才不到一周。。。  发表于 2020.3.16 20:21
winXP,win7,win8,win10皆有这种问题。且无论是否正版。发生方式存在随机性  发表于 2020.3.15 20:38
发表于 2020.3.15 20:18 | 显示全部楼层
本帖最后由 b1353268241 于 2020.4.2 19:52 编辑






发表于 2020.3.15 22:11 | 显示全部楼层
内存的兼容性不好吧?以前买过一对芝奇的套装内存,总是内存报错,后来发现有一条内存有问题,用了不到一年最后挂了,后来售后给我换了一条新的,就在也没报错过~

点评

海盗船的连号条。。。玩啥都没问题。就洛奇。。挂的时间一久·换图就弹出。  发表于 2020.3.16 20:26
我也在怀疑这个问题。问题是只有洛奇会这样。其他游戏很正常。  发表于 2020.3.16 00:18
发表于 2020.3.15 23:20 | 显示全部楼层
本帖最后由 眠之黑 于 2020.3.16 00:09 编辑
duckpears 发表于 2020.3.15 20:22
我是win10专业版,依然有问题。我是AMD Yes!依然有问题。估计还是洛奇的问题,毕竟太老了,和现在的系统 ...


我上1台电脑 WIN10 没出现过 内存问题。是AMD的。现在新装的高端 就出问题。现在有点迷


刚刚专业版还是爆了 服了
发表于 2020.3.16 10:16 | 显示全部楼层
鸡蛋甲 发表于 2020.3.15 17:23
解决方法暂无
但可通过自动释放内存软件,如内存释放专家(MemEmpty)
通过设置内存补丁MLP及其扩展tin/koori ...

谢谢大佬耐心解答,原来不是我电脑的问题了
发表于 2020.3.16 10:30 | 显示全部楼层
wow! 我还以为就我这样!  看到大家都这样闪退我就放心了...

补充! 特别是回音到BOSS过图那里!经常!
发表于 2020.3.16 10:33 | 显示全部楼层
企业版一样会概率爆
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

Archiver|手机版|小黑屋|爱琳世界-逐梦者庭院

GMT+8, 2025.11.20 03:07 , Processed in 0.153422 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表