欢迎访问本站!

首页头条正文

usdt官网(www.caibao.it):打开GTA 5竟要跑19.8亿次if语句!黑客讽刺R星代码烂,修改后直接省70%加载时间

admin2021-03-03127

USDT自动充值

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

原题目:打开GTA 5竟要跑19.8亿次if语句!黑客讽刺R星代码烂,修改后直接省70%加载时间

贾浩楠 发自 凹非寺

量子位 报道 | 民众号 QbitAI

一支烟的功夫, GTA 5联机版终于打开了。

「7年了!GTA 5联机版加载照样这么慢??」

进游戏少则等5、6分钟,多则20分钟。

终于,一个黑客年老着实忍不了,用逆编译器逐条查看运行情形,终于找到缘故原由。

原来,R星 写的代码太低效,加载时,一个if语句竟然循环了19.8亿次….

幕后黑手:谁占用大量时间?

加载GTA 5 Online到底有多慢?

Reddit相关板块提议的观察中,跨越80%的玩家,都要等3分钟以上,有的甚至跨越15分钟。

而且,从7年前Online上线到今天,这个情形丝毫没有改善。

浮躁的,已经骂起了脏话……

但奇怪的是,若是你选择是故事模式 ,加载就会快许多,感受甚至像两个差别的工作室开发的游戏。

详细到这位黑客年老的例子,他自己的硬件设置如下:

CPU,是老而弥坚的AMD FX-8350,2012年上市,接纳“推土机”架构,超频潜力惊人。

显卡照样GTX 1070。

这样今天看起来老旧的设置,打开单机版GTA 5需要1分10秒,而加载联机版则6分钟起。

黑客年老用了最简朴的Windows义务管理器,来判断联机版GTA 5在启动时,都挪用了哪些计算机资源。

在1分钟的时间分界线上,之前是加载的是单机和联机版通用的基础内容,之后是联机版独占的内容。

可以看到,联机版GTA 5,加载时挪用大量CPU资源至少长达4分钟之久。

而同时,内存、GPU、硬盘的使用情形几乎没有明显变化。

以是,问题大概率出在代码上。

“R星代码写太烂!”

黑客年老在开扒R星代码之前,就说:

我闻到一股烂代码的味道…..

为了找出到底那一部门程序卡住了CPU,他使用了工具 Luke Stackwalker,对CPU义务客栈举行采样剖析。

Luke Stackwalker对于闭源应用程序,可以转存正在运行的历程客栈,和当前指令指针的位置,以一定时间距离确立一个挪用树。

最后将数据整合,就可以获得程序运行统计数据。

,

Usdt第三方支付平台

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

从效果上看,一共有两个函数“卡住”了CPU:

于是他使用专业的代码拆解工具,给GTA 5来了一个“开膛破肚”。

沿着挪用栈往下走,发现问题出在一个 sskanf函数上。

sskanf的功效是读取格式化的字符串中的数据,而在GTA 5中,它正在读取的是一个10M左右,有63000多个条目的JSON文件。

这个文件到底是干什么用的?黑客年老推测,这可能是 游戏内购商铺的相关内容。

在详细运行时,sskanf对于每个有效值,逐个读取每一个字符,然后返回效果,之后指针移向下一个值,循环往复……直到把10M文件所有扫一遍。

再看第二个问题,这是一个存储下令,工具是 item,详细是什么不得而知。

然则保留前,有一个if语句,逐一对照item内项目的哈希值,检查它们是否出现在某一列表中。

没错,守候加载前的十多分钟里,GTA 5用你的CPU,执行了19.8亿次if下令。

云云简朴粗暴的编程思绪,让这位老哥啼笑皆非:

既然工具有唯一哈希值,那为什么不用 hash map???

问题解决,加载时间节约70%

至于第一个问题,黑客年老接纳hook大法,纷歧一读取字符串,而是:

hook strlen

“缓存 “字符串起始和当前长度。

若是在字符串范围内函数在此被挪用,返回缓存的值

至于if语句问题,就更直接了——完全跳过重复检查,行使hash map插入项目,由于这些值是唯一的。

最后的效果如下:

现在,GTA 5联机版加载,从原来的6分钟,下降到现在的1分50秒!而且,用的照样七八年前的硬件设置。

在此,应该手动@R星:你学废了吗?

这位黑客年老在博文中没有留下任何身份信息,也没有透露用的反编译工具,然则做好事不留名的他,把打好包的工具上传到了Github,玩家通过一行代码就能下载:

之后,把dll文件粘贴到游戏根目录下就OK!

加入AI社群,拓展你的AI行业人脉

量子位「AI社群」招募中!迎接AI从业者、关注AI行业的小伙伴们扫码加入,与 50000+名密友配合关注人工智能 行业生长&手艺希望

网友评论