当RAM不足时,堆上动态分配的变量可以利用磁盘上的交换空间(尽管会导致性能下降)。我的问题是内存中的堆栈是否也可以利用交换空间。
例如,以下程序在堆栈上放置一个大数组。 (当然,通常我们会在堆上动态分配大变量。)如果这个程序在运行时崩溃,我可以通过添加交换空间使它成功运行吗?
int main()
{
int myArray[1000000];
return 0;
}
答案 0 :(得分:0)
实际上它是交换所做的,交换程序数据和堆栈空间:
http://www.linuxjournal.com/article/10678
这些被放置在匿名页面中,因为它们没有,因此命名 命名文件系统源。修改后,必须保留匿名页面 在程序的持续时间内RAM,除非有次要的 存储写入。用于这些修改的二级存储 匿名页面就是我们所说的交换空间。
对执行严格VM记帐的系统的经典建议 各种各样,但大多数都徘徊在“两倍的RAM” 数字。这个数字假设你的记忆大部分将被填充 一堆小的交互式程序(它们的堆栈空间是 可能是他们最大的记忆需求)。
假设你正在运行一个包含500个线程的Web服务器,每个线程都有8MB 堆栈空间。只有堆栈空间才需要你拥有 配置4GB的交换空间让记忆会计师满意。