仅是非常笼统和简单地讲,并且在不考虑虚拟内存实现细节的情况下,开发人员在预见性方面始终了解VM实现缺少的知识。
开发人员总是可以说:“我现在不需要加载此音频文件。其中的音乐仅用于屏幕游戏。” 并且在游戏结束后,开发人员可以立即说:“我不再需要物理内存中的音频片段。它仅用于游戏结束时。”
操作系统没有这种预见性。以后可能会发现很多页面错误,因为已经有一段时间没有访问它了,因此物理内存中不再需要某些音频剪辑。但是,将远见变成事后预见会导致很多页面错误,而很多页面错误则会导致软件中的帧率降低,而视频游戏等时间至关重要。如果您想避免这种麻烦,开发人员的远见卓识确实会有所帮助。
这在概念上适用,与硬件和软件无关。假设内存中的页面调度很昂贵,那么开发人员的远见卓识将始终有助于减少这种开销。
概括地说,硬件设计人员,编译器设计人员,OS /驱动程序设计人员和应用程序开发人员之间存在一个永无止境的循环。硬件/编译器/ OS /驱动程序开发人员经常尝试根据其通常的内存访问模式来实现优化,以加快普通应用程序的运行速度,有时甚至希望“人们应该能够随心所欲地编写代码,应该很快。”但是,如果考虑到这种类型的情况,通常对于性能至关重要的字段都会失败,因为性能关键的开发人员开始学习其编译器,硬件,操作系统,驱动程序等的复杂细节,并开始专门编写代码设计用于尽可能多地编写最快的代码(例如预取,热/冷字段拆分,SoA等用于缓存友好的代码)。那就像一个永无止境的游戏。在开发人员争夺性能的情况下,这些事情在性能至关重要的领域从未被视为黑匣子。
我个人有点希望虚拟内存不存在,因为它以一种过于极端和招致的方式增加了性能不可预测性的另一层,当事情真的到了无法使用的地步时,就会对性能造成太大的影响。有时我遇到过这样的情况:使用某些应用程序时,我在喝醉到某个输入字段时无意中输入了额外的一两位数字,然后导致它以如此快的速度耗尽了物理内存,从而导致操作系统无法进行爬行。甚至无需再单击进度条上的“取消”按钮,就不得不等待10分钟,同时按下Ctrl + Alt + Del终止进程,然后对自己进行诅咒,同时又将我的饮料洒到了可以再次使用的地步。尽管页面文件存储在SSD中。在那种情况下,我宁愿选择“内存不足”错误或其他方法,此时我可能会关闭我的17个色情标签(没关系,无论如何我都收藏了我的收藏夹)以释放一些内存,然后立即处理恢复我的业务。