内存:堆栈和交换
当没有足够的RAM时,堆中动态分配的变量可以利用磁盘上的交换空间(虽然会导致性能下降)。 我的问题是如果内存中的堆栈也可以利用交换空间。
例如,以下程序在堆栈上放置一个大数组。 (当然,我们通常会动态地在堆上分配大量变量。)如果此程序在运行时崩溃,可以通过添加交换空间使其成功运行吗?
int main()
{
int myArray[1000000];
return 0;
}
实际上它是交换所做的,交换程序数据和堆栈空间:
http://www.linuxjournal.com/article/10678
这些被放置在匿名页面中,因为它们没有命名的文件系统源而被命名。 一旦修改,除非有辅助存储将其写入,否则匿名页面在程序期间必须保留在RAM中。 用于这些修改的匿名页面的辅助存储就是我们所说的交换空间。
关于严格虚拟机会计的系统的经典建议各不相同,但其中大多数建议围绕“RAM的两倍”数字。 这个数字假设你的内存大部分会被一堆小型的交互式程序填满(其堆栈空间可能是他们最大的内存需求)。
假设你正在运行一个500线程的Web服务器,每个线程都有8MB的堆栈空间。 单独的堆栈空间将要求您为内存会计师配置4GB的交换空间才能满意。
链接地址: http://www.djcxy.com/p/14001.html