网易首页 > 网易号 > 正文 申请入驻

整整2.5年!DOOM在老硬件上终于崩溃了

0
分享至


整理 | 屠敏

出品 | CSDN(ID:CSDNnews)

如果说游戏史上有哪款作品最经得起时间考验,《DOOM》一定榜上有名。

这款 1993 年 12 月发布的 FPS 开山之作,不仅掀起了玩家对“第一人称射击”的狂热,还影响了此后几十年的游戏文化。自那时起近 32 年时间里,数不清的玩家投入了数百万、甚至数十亿小时沉浸其中,更别说社区也贡献了大量模组与自制关卡。可即便如此,它的底层代码里依旧埋着一些奇怪的遗留问题。

为了验证其中一个鲜有人注意的32 位整数溢出 Bug 是否真的会在现实中触发,一名极客决定做个实验:把《DOOM》在一款老旧的硬件上开着跑上几年,看看会发生什么。结果是——在两年半之后,游戏真的崩溃了。


极客实验:掌机 + UPS + “忘掉它”,让 DOOM 跑到崩溃

这名极客叫 Minki,谈及此次实验的初衷,其表示是源于他当时偶然间看到了一篇讲 DOOM 引擎的文章,发现有个用来记录 demo 播放的变量,每次都会一直往上加,甚至在下一个 demo 开始之后也还在加。程序里会把这个变量和另一个保存“前一个值”的变量做比较。问题在于,这个变量每次加一,迟早会接近溢出。虽然在正常情况下几乎不可能跑到那一步,但他就特别好奇:要是一直运行下去,多久会因为这个溢出而把游戏搞崩?

为了搞明白这个问题,他在自己的网站 LenOwO 上分享了这次“实验”过程——将移植版的 WinDOOM 装进一台 2003 年的华硕 MyPal A620 掌机里。这台掌机搭载 Windows Mobile 系统和 Intel XScale ARMv5 处理器,性能早已落伍。为了确保设备长时间不断电,Minki 还动手 DIY 改装了一块 18650 锂电池 UPS,并通过路由器的 USB 接口稳定供电,保证能一直有 5V 电压。

然后,这台掌机就被丢在角落里,绝大多数时间无人问津,直到两年半后,Minki 才发现屏幕上弹出了熟悉的“应用程序崩溃”提示。



崩溃幕后:gametic 的“死亡倒计时”

问题的根源其实埋在 DOOM 的代码里。和很多老牌商业软件一样,即便到了 1.9 最终版本,游戏依旧遗留了不少 bug。这里最关键的就是一个名叫gametic的计时器变量。

这个数值用于追踪游戏内的时间流逝,并且以35Hz(每秒 35 次)的固定频率递增,而不依赖游戏的渲染循环。即使不需要多复杂的数学知识,也能看出如果 gametic 永远不清零,时间一长它就会变成一个天文数字。

作为 DOOM 引擎的主要开发者,John Carmack 当年其实肯定知道这里的设计有点小问题。但他大概觉得没什么关系。为什么?因为这个数是存在有符号的 32 位整数里的。

这种整数能表示的范围大概是:从-2,147,483,647+2,147,483,647。所以只要你从 0 一直往上加,加到2,147,483,647这个天花板,下一次再加,就会溢出。

在 C 语言的标准里,“整数溢出”属于“未定义行为”。但在 x86 PC 这种常见的硬件上,几乎总是会出现一个很直观的结果:数值会绕一圈回到负数的最小值。也就是说,它会从最大正数跳到-2,147,483,647

换句话说,Carmack 知道这个变量理论上会溢出,但考虑到要数二十多亿次才会触发,在正常游戏流程里压根没人能跑到这一步,所以他就没当回事。


经过 2.5 年后,游戏崩了

正如上文所述,按照每秒 35 次计数来算,大约1.95 年就会让 gametic 数值溢出。当时 Minki 自己算过一遍,具体怎么算的已经记不清了,但他记得结果大概是——差不多能跑两年半才会溢出。

如今的实验证明,这款游戏真的经过了 2.5 年后崩了。所以,别把 DOOM 持续开着两年——或者说,任何游戏都别这么做,除非它是专用的服务器而不是客户端。


一场实验引发的思考

这场实验虽然看起来毫无实用意义,但却透露出几个耐人寻味的地方。首先,很多开发者在写代码时会假设用户不会让程序运行那么久,于是一些看似微不足道的边界条件就被忽略了。其次,C 语言中的未定义行为总是让人摸不透——有时表现一致,有时却完全不可预测。

随着 Minki 的帖子登上 Hacker News 热榜,也引发了不少讨论。许多人分享了类似经历:

  • 一位叫jbreckmckye的用户分享说,他在研究《古惑狼 3》的计时系统时发现,它同样有一个不断递增的 int32 计数器,只有在角色死亡时才会归零。如果一直运行下去,2.26 年后也会溢出。

  • jsheard则提到,《最终幻想 9》有一把隐藏武器,必须在游戏时间不到 12 小时的情况下赶到后期地图才能拿到。PAL 版本因为疏忽更狠,只给 10 小时。听上去几乎不可能,但还有另一条路:把游戏放着别管它,两年多之后计时器自己溢出归零,你就能拿到这武器了。慢慢来,照样能赢。

其实游戏中看似不可能触发的边界条件,不仅真的会发生,还能在不同游戏里演变成一种另类的“隐藏彩蛋”。

来源:https://lenowo.org/viewtopic.php?t=31

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
1比3惨败张本智和!21岁黄友政肩负重任,中国男单人才断层显现

1比3惨败张本智和!21岁黄友政肩负重任,中国男单人才断层显现

卿子书
2026-01-16 10:00:18
台湾同胞去呆呆家后续:呆呆举止加分,菜色很讲究,台湾同胞回应

台湾同胞去呆呆家后续:呆呆举止加分,菜色很讲究,台湾同胞回应

古希腊掌管松饼的神
2026-01-16 18:21:15
王鸥王仁君新年拜访曹翠芬,81岁没子女住北京,家里简朴挺温馨

王鸥王仁君新年拜访曹翠芬,81岁没子女住北京,家里简朴挺温馨

李健政观察
2026-01-15 12:06:39
咸鱼还是太全面了,怪不得人称国内黑市

咸鱼还是太全面了,怪不得人称国内黑市

另子维爱读史
2025-12-20 17:07:20
为什么都是技术合伙人被踢出局?看完网友的分享:是这么个道理

为什么都是技术合伙人被踢出局?看完网友的分享:是这么个道理

夜深爱杂谈
2026-01-16 18:27:58
美国终于回过味来了:这个世界上,不会再有第二个“中国”了

美国终于回过味来了:这个世界上,不会再有第二个“中国”了

忠于法纪
2026-01-16 21:06:27
600亿高铁日德不敢接,中国接手亏损41亿美元,回头来看稳赚不赔

600亿高铁日德不敢接,中国接手亏损41亿美元,回头来看稳赚不赔

百科密码
2026-01-12 16:08:30
手戴1000多万名表,坐拥3.6亿私人飞机,“沪上皇”秦奋啥来头?

手戴1000多万名表,坐拥3.6亿私人飞机,“沪上皇”秦奋啥来头?

小熊侃史
2026-01-12 07:40:07
中国气象局答红星新闻:寒潮低温天气会持续到下周末,之后不应对大回暖有过高期待

中国气象局答红星新闻:寒潮低温天气会持续到下周末,之后不应对大回暖有过高期待

红星新闻
2026-01-16 13:53:13
难以置信!有人把呆呆家门口的土挖走,直播销售三坨赚了190元…

难以置信!有人把呆呆家门口的土挖走,直播销售三坨赚了190元…

火山诗话
2026-01-15 09:32:32
院长落马,家中搜出1亿现金

院长落马,家中搜出1亿现金

医疗器械经销商联盟
2026-01-15 11:59:45
金正哲联手张成泽发动朝鲜兵变,因一细节败露,双遭反杀!

金正哲联手张成泽发动朝鲜兵变,因一细节败露,双遭反杀!

阿胡
2024-02-02 14:55:28
雷军直播官宣小米YU7新政策:首付4.99万起,全系送1.8万元零重力座椅

雷军直播官宣小米YU7新政策:首付4.99万起,全系送1.8万元零重力座椅

TechWeb
2026-01-16 10:53:03
朝鲜第一“妖女”,与国王在宴会上“办事”,比妲己还夸张

朝鲜第一“妖女”,与国王在宴会上“办事”,比妲己还夸张

老澽爆笑大聪明
2026-01-13 20:00:05
西贝贾国龙再发声为华杉正名:“当时他流泪劝我不要回应,是我不听”

西贝贾国龙再发声为华杉正名:“当时他流泪劝我不要回应,是我不听”

现代快报
2026-01-16 11:14:31
3连败1-5!中国队再战强敌,难进U23亚洲杯四强,亚足联帮不上忙

3连败1-5!中国队再战强敌,难进U23亚洲杯四强,亚足联帮不上忙

侃球熊弟
2026-01-15 23:56:41
实探宣布关店后的西贝:上海已有数家门店关闭

实探宣布关店后的西贝:上海已有数家门店关闭

第一财经资讯
2026-01-16 19:46:42
还是得认命!75岁意外摔倒、分不清人的刘晓庆,终要败在年龄上了

还是得认命!75岁意外摔倒、分不清人的刘晓庆,终要败在年龄上了

甜柠聊史
2025-12-03 15:14:30
格陵兰岛本就不是丹麦的!从历史根儿上算,真正归属早有定论

格陵兰岛本就不是丹麦的!从历史根儿上算,真正归属早有定论

福建平子
2026-01-12 10:33:34
-14℃!局部大雪!江苏将迎入冬最强雨雪冰冻天气

-14℃!局部大雪!江苏将迎入冬最强雨雪冰冻天气

扬子晚报
2026-01-16 20:12:54
2026-01-16 21:51:00
CSDN incentive-icons
CSDN
成就一亿技术人
26264文章数 242218关注度
往期回顾 全部

游戏要闻

拒绝QTE!《古墓丽影》重制和霸王龙战斗完全手动

头条要闻

温州一家企业火了:春节放假35天 准时返岗再发5000元

头条要闻

温州一家企业火了:春节放假35天 准时返岗再发5000元

体育要闻

全队身价=登贝莱,他们凭什么领跑法甲?

娱乐要闻

李湘翻车,早就有迹可循!

财经要闻

清流|酒店商家在携程和美团之间沦为炮灰

科技要闻

传小米传音Ovi四家手机厂下调全年出货预期

汽车要闻

方程豹品牌销量突破30万辆 2026年还将推出轿跑系列

态度原创

房产
手机
数码
游戏
公开课

房产要闻

喜封金顶 臻境初呈丨中粮·铂悦壹号3#楼封顶大吉!

手机要闻

iPhone 17e再次被确认:60Hz刷新率+A19芯片+灵动岛,上半年登场

数码要闻

震动拖地+8.8cm越障!石头G30S Pro将带来极致清洁体验

LCK春季赛:T1阵容初见峥嵘,三局战胜HLE,宙斯和姑妈有点难看

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版