当游戏在第无数次达到2GB内存边界崩溃时,我由于无法正常游玩自己的地图感到恼火,所以开发了这个补丁来延迟Storm.dll内存管理系统导致的崩溃。
Storm.dll是暴雪娱乐早期开发的核心基础库,存在内存池设计缺陷:虚拟内存只增不减,导致32位进程在长时间运行后耗尽2GB地址空间。
StormBreaker通过API钩子拦截Storm.dll的内存管理函数,引入现代内存分配策略。
性能影响:使用此补丁会导致游戏出现明显性能下降。这是为了解决内存泄漏问题所必须付出的代价。我们正在努力改进性能,但目前请做好游戏会变卡的准备。 兼容问题:此补丁本是为自己地图开发的插件,所以该插件只经过自己地图测试可正常通关为标准,插件不保证与其他地图的兼容性,本插件目前仅支持1.27a。
月光探戈:在IDA反编译器的幽蓝光芒中,为401函数群赋予人性化注解
-
Alloc_401
:永不停歇的夸父,追逐虚拟内存的地平线 -
ReAlloc_405
:西西弗斯式的自我重组,在内存峭壁上雕刻希望 -
Free_403
:沉默的守墓人,墓碑铭刻"此处本应释放" -
大块内存拦截与管理
-
虚拟内存智能释放
-
内存碎片整理
-
崩溃防护机制
128KB拦截
===== 内存使用报告 =====
Storm 虚拟内存: 234 MB
TLSF 内存池: 67 MB / 128 MB (52.6%)
TLSF 管理块数量: 90
工作集大小: 636 MB
虚拟内存总量: 698 MB
========================
256KB拦截
===== 内存使用报告 =====
Storm 虚拟内存: 313 MB
TLSF 内存池: 60 MB / 128 MB (47.2%)
TLSF 管理块数量: 44
工作集大小: 644 MB
虚拟内存总量: 702 MB
========================
512KB拦截
===== 内存使用报告 =====
Storm 虚拟内存: 485 MB
TLSF 内存池: 51 MB / 128 MB (40.3%)
TLSF 管理块数量: 18
工作集大小: 642 MB
虚拟内存总量: 703 MB
========================
不启用大块拦截
===== 内存使用报告 =====
Storm 虚拟内存: 1020 MB
TLSF 内存池: 0 MB / 128 MB (0.0%)
TLSF 管理块数量: 0
工作集大小: 598 MB
虚拟内存总量: 720 MB
========================
这是在我自己地图上进行的测试,当大块拦截拦截阈值越低其降低Storm虚拟内存的效果就越明显。 而当Storm虚拟内存抵达2G的时候所分配的内存会导致游戏崩溃,且Storm虚拟内存无法下降,除非CleanAll可以找到没有分配哪怕一个点的堆。
- 下载最新的StormBreaker.asi
- 将asi放入游戏目录
- 若启动游戏后看到控制台输出“Hello StormBreaker!”以及两个初始化成功则代表安装成功。
补丁钩住了Storm.dll的核心内存函数:
- Storm_MemAlloc
- Storm_MemFree
- Storm_MemReAlloc
- StormHeap_CleanupAll
本项目采用MIT许可证。
"本项目遵循数字千年版权法案第1201(f)条,旨在延续经典游戏生命力。如有版权问题请优先通过社区渠道协商解决。" QQ:1594199381
作者正在备赛期间,暂时停止更新。
开发性能优化方案,希望在保持内存稳定性的同时减少性能损失。
如果这个项目帮助到了您,请考虑给它一颗星⭐
在此项目的开发过程中,我获得了许多人的帮助和支持。特别感谢:
感谢Asphodelus提出该想法并进行指导。
感谢TLSF算法的原创者Matthew Conte,提供了高效的内存分配算法。
感谢Detours库的开发团队,使得函数钩子变得更加简单可靠。
最后感谢跟我一路过来的Claude、ChatGPT、DeepSeek帮我一起啃那不是人看的反汇编。