什么是Linux堆栈?

问题描述:

我最近遇到了一个“linux stack”和“linux stack size”的bug。我碰到一个博客指挥我来试试什么是Linux堆栈?

ulimit -a 

,看看有什么我的框限,它被设置为8192kb这似乎是默认的。

什么是“linux堆栈”?它是如何工作的,它存储了什么,它有什么作用?

+3

http://en.wikipedia.org/wiki/Call_stack – 2012-01-18 04:50:37

+0

堆栈溢出可能与过深(或无穷大)递归出现。或者可能通过在C代码中滥用'alloca'(或等效的,如可变长度数组)。 – 2012-01-18 05:59:54

+0

相关:http://*.com/questions/17671423/stack-allocation-for-process | http://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux/239323#239323 – 2016-04-05 09:41:46

简短的回答是:

当程序在你的Linux中运行,他们添加和删除定期的程序功能,从the stack数据。堆栈大小反映堆栈在内存中分配了多少空间。如果增加堆栈大小,则允许程序增加可以调用的例程数量。每次调用函数时,都可以将数据添加到堆栈中(堆积在最后一个例程数据的顶部)。

除非程序非常复杂,或者为特殊目的而设计,堆栈大小为8192kb通常很好。某些程序如图形处理程序要求您增加堆栈的大小以便运行。因为他们可能会在堆栈上存储大量数据。

随意增加这些应用程序的堆栈大小,这不是问题。要做到这一点,使用

ulimit -s bytes

BTW,What is a *Error?

+0

非常感谢您的回答。我在Ruby应用程序中遇到了'SystemStackError:stack level too deep'错误,并希望在继续调查之前更好地理解基础知识。 – jaredonline 2012-01-18 20:27:46