内存:堆栈和交换

时间:2015-05-11 06:19:40

标签: linux memory stack heap swap

当RAM不足时,堆上动态分配的变量可以利用磁盘上的交换空间(尽管会导致性能下降)。我的问题是内存中的堆栈是否也可以利用交换空间。

例如,以下程序在堆栈上放置一个大数组。 (当然,通常我们会在堆上动态分配大变量。)如果这个程序在运行时崩溃,我可以通过添加交换空间使它成功运行吗?

int main()
{
    int myArray[1000000];
    return 0;
}

1 个答案:

答案 0 :(得分:0)

实际上它是交换所做的,交换程序数据和堆栈空间:

http://www.linuxjournal.com/article/10678

  

这些被放置在匿名页面中,因为它们没有,因此命名   命名文件系统源。修改后,必须保留匿名页面   在程序的持续时间内RAM,除非有次要的   存储写入。用于这些修改的二级存储   匿名页面就是我们所说的交换空间。

     

对执行严格VM记帐的系统的经典建议   各种各样,但大多数都徘徊在“两倍的RAM”   数字。这个数字假设你的记忆大部分将被填充   一堆小的交互式程序(它们的堆栈空间是   可能是他们最大的记忆需求)。

     

假设你正在运行一个包含500个线程的Web服务器,每个线程都有8MB   堆栈空间。只有堆栈空间才需要你拥有   配置4GB的交换空间让记忆会计师满意。