a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!

a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

大家好,这里是正惊游戏,我是你们的正惊小弟。
GTA5作为一款老游戏,可能很多玩家都有玩过。不过有些玩单机版的玩家可能不知道,GTA5的联机版也就是GTA5 online游戏加载情况却被人诟病已久。
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

就这么说吧,对于大众游戏,除去第一次的内容解压,一般玩家第二次打开游戏界面,游戏内容加载也就在10-30秒,配置差一点的玩家可能在1分钟。但是这款2013年的游戏却让高配置玩家等待3-6分钟,差一点的配置玩家可能需要10分钟甚至更久。
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

也就是说当你双击游戏图标时点开一支烟,这根烟抽完了你才刚刚进入游戏……
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

或许有些玩家觉得这款游戏太费烟,开始较真起来,其中以国外的一个ID为T0ST的黑客大佬为代表,他好好的分析了一下GTA5游戏打开时的程序后台的电脑资源占用情况。
所谓是内行看门道,这位黑客发现自己的GTX1070+FX8350联机版打开竟然需要6分钟,于是开始着手一篇优化GTA5OL的博客。
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

【 a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!】大佬在博客中写到,GTA5OL运行时在这漫长的6分钟里,程序的有一行代码被执行了1.98亿次。这行代码就是程序里常用的判断语句,也就是if...else语句,换做文字就是“如果是,则执行“这样的语句,而且这段代码使用的架构非常奇怪和低效。
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

至于这行代码为什么要执行这么多遍,这位老哥也顶着掉头发的风险,使用专门的工具测了出来,发现罪魁祸首就是一个仅有10m大小的文件。根据文件内容猜测,似乎是在线商店物品列表。GTA5启动时,必须将这个文件从头到尾查阅一遍甚至多遍。
a702|R星程序员这么水?10M的文件被读取20亿次,最后被黑客搞定!
文章插图

这个大概是什么概念呢,小弟简单计算,理想状态下一个if语句要读取50个字节长度的内容需要1毫秒,那么读取完这个10m的文件就需要整整200秒,也就是3分钟左右。这还仅仅是这一个文件的读取,更不用提数个G大小的游戏本体了……
为了读取完这个10M大小的文件,再将读取的结果进行储存,R星程序员竟然简单的用的if语句进行比对,这段if代码计算下来执行了(63000^2+63000)/2 = 1984531500次!

【精彩生活】jing111.com小编为您精选以下内容,希望对您有所帮助: