魔兽地图编辑器吧 关注:64,745贴子:3,832,977
  • 9回复贴,共1

魔兽内存排泄

只看楼主收藏回复

最近内置japi 增加了一个新的接口 专门排泄魔兽缓存模型的

可以瞬间让魔兽释放出几百mb的内存 降低一些地图内存不足的部分
之后准备做jass的字符串排泄
思路是这样的 先搜索 全局变量 跟 哈希表 排除掉一些有引用的字符串 剩余不存在引用的将进行排泄
要排泄字符串就要弄清楚魔兽的字符串缓存机制是什么样的
相关数据表有
2858 jass的符号表 储存编译jass时的 字符串
2874 字符串数组表 以数组的方式储存 每一个字符串对象元素
287c 字符串哈希表 以字符串哈希值 映射到 一个元素里 该元素记录着2874的数组索引
所以魔兽创建字符串的思路 如下
创建 一个jass字符串
先 访问 2858符号表里 是否有创建过 如果有 则引用
如果没有 则 搜索 287c哈希表里是否有创建过 有则返回 2874表里的 字符串id
如果没有 则从2874里 申请一个数组元素 再构造一个字符串对象 再将字符串id 添加到 287c的哈希表里
所以要排泄字符串 要反过来
需要 先排除掉 2858里的符号字符串
再找到 哈希表移除元素 先将 287c的元素进行移除
再将 2874的 数组 里的一些二叉树元素进行销毁 之后 进行置空
再将 字符串对象进行销毁
理论上如此 其中还需要大量逆向相关代码 遍历变量哈希表 这块已经实现 剩下的需要逆向这几个 表的移除元素 以及构造函数 ~~~ 虽然有点难度 做出来的话 还能再跟魔兽压榨出一些内存~~


IP属地:广东1楼2020-12-09 13:52回复
    又是很*,而我不会用的功能


    IP属地:广东来自Android客户端2楼2020-12-09 14:04
    回复
      先立个flag把 起码要花几天时间才能逆得清楚, 有空再做~~


      IP属地:广东3楼2020-12-09 14:05
      回复

        支持


        IP属地:安徽4楼2020-12-09 15:22
        回复
          效果怎么样


          IP属地:广东来自Android客户端5楼2020-12-09 16:56
          回复
            我感觉魔兽单位删除不干净啊,有没有这回事


            IP属地:山东来自Android客户端6楼2020-12-09 17:45
            回复
              66666666


              IP属地:广东来自Android客户端7楼2020-12-10 04:14
              回复
                魔兽字符串泄露搞死人


                IP属地:广东8楼2021-02-01 15:39
                回复
                  大佬 内置japi怎么移植到我自己图上就弹错 是因为我用的1.24版本吗


                  IP属地:四川来自Android客户端9楼2021-07-26 11:41
                  回复