
x86模拟器团队修复糟糕代码往事
2026年6月15日,有相关分享提及x86模拟器团队发现并修复糟糕代码的往事。
作者简介
Raymond参与Windows系统的开发已有30多年。2003年,他创建了名为 “The Old New Thing” 的网站,其受欢迎程度远超他的想象,这一发展仍让他感到不可思议。该网站催生了一本同名书籍(Addison Wesley 2007年出版)。他偶尔会在Windows Dev Docs的Twitter账号上分享一些并无实际用途的故事。
事件详情
在一次分享工作经历的交流中,一位同事讲述过去的一件事。那时,Windows系统会在原生运行其他处理器的系统上配备一个x86 - 32处理器模拟器(不清楚这个故事具体针对的是哪种处理器)。
这个特定的模拟器采用了二进制翻译技术,生成原生代码来执行与原始x86 - 32代码等效的操作。与通过解释器进行模拟相比,这种方法显著提升了性能。可以把x86 - 32想象成一种字节码,而模拟器就像是一个即时编译器(JIT compiler)。
同事发现,有一个程序需要在栈上分配大约64KB的内存并进行初始化。标准做法是进行栈探测,确保有64KB的可用内存,然后将栈指针减去65536,再通过一个紧凑的小循环来初始化内存。
然而,编译这段代码的编译器觉得用循环初始化内存太过普通。它没有生成一个循环来初始化缓冲区的每个字节,而是将循环展开成65536条单独的 “写入字节到内存” 指令,每条指令长4字节。总体而言,这个程序用256KB的代码来初始化64KB的数据。
这种情况让团队非常不满,他们在翻译器中添加了特殊代码,以检测这个糟糕的函数,并将其替换为等效的紧凑循环。
评论观点
pac 2000评论称,现代CPU实际上也会在预取流水线中展开循环,这在计算机科学领域是常见的做法,其在编写代码时会特意利用这一点。同时表示,要么选择内存使用高效但运行缓慢的代码,要么选择运行快速但占用大量内存的代码,但用256KB代码来初始化64KB数据的做法有点过头。
微软相关信息
产品方面有Surface Pro、Surface Laptop、Surface Laptop Studio 2等;微软商店涉及Account profile、Download Center等;教育领域包括Microsoft in education、Devices for education等;企业方面有Microsoft AI、Microsoft Security等;开发者与IT方面涵盖Azure、Microsoft Developer等;公司信息包含Careers、About Microsoft等。
隐私与相关声明包括Your Privacy Choices Opt - Out Icon Your Privacy Choices、Consumer Health Privacy等内容。提醒大家关注相关隐私与声明内容。



被折叠的 条评论
为什么被折叠?



