我通常在我的浏览器(Pale Moon x86)中运行几百个选项卡,经常将程序的内存使用量推高至 2-3GB。
当程序运行时遇到内存限制会发生什么?系统是否只是继续为它提供内存,但“现在”以磁盘交换的形式?程序是否“知道”它已达到系统内存限制?
直到最近,我才对为什么浏览器的内存大小没有继续增长,并开始以糟糕的性能(32/64 位内存空间)继续增长的(简单的)洞察力闪现!
所以我现在开始转向 Waterfox,一种 x64 变体。x64 程序是否会继续增加其内存使用量,直到系统说“不再”?
当 32 位程序(在 64 位机器上运行)达到内存限制时会发生什么?
与 32 位系统上发生的事情相同:程序以某种方式失败。
就 32 位程序而言,“宇宙”由多达4GB 的数据组成。它不知道自己的小盒子之外的更大区域(想想 Michio Kaku 在他的书Hyperspace 中使用的鱼类比)。
如果您打开太多选项卡并增加其内存使用量,它将填满 Universe,当它用完时,它会抱怨它没有足够的内存来打开新选项卡或显示图片或其他任何内容。好吧,写得好它会抱怨;如果它写得不好,那么它就会崩溃。
从低级的编程角度考虑。32 位程序使用 32 位指针来存储数据。这意味着它最多可以指向 4GB 的数据。如果它已经用完了4GB,那么即使操作系统可以给它更多,新指针的值是多少?新地址会太远,程序将无法将如此大的地址放入 32 位指针中。
打个比方,想想电话号码。假设在您所在的城市,人口不多,因此您的电话号码都是 5 位数字,最多可容纳 10,000 个号码,因此您所有的通讯录最多有 10,000 个电话号码空间。然而,这个国家有很多人,所以它使用 7 位数字。即使国家可以给你一个很远的人的号码,你也无法将它存储在你的通讯录中,因为你只有5位数字的空间可以打印数字,所以一旦你打印了10,000个数字,这本书已经满了。