什么是Linux堆栈?
我最近遇到了一个关于“linux堆栈”和“linux堆栈大小”的bug。我偶然发现一个博客,指导我去尝试什么是Linux堆栈?,linux,linux-kernel,Linux,Linux Kernel,我最近遇到了一个关于“linux堆栈”和“linux堆栈大小”的bug。我偶然发现一个博客,指导我去尝试 ulimit -a 查看我的框的限制是多少,它被设置为8192kb,这似乎是默认值 什么是“linux堆栈”?它是如何工作的,它存储了什么,它做了什么?简单的回答是: 当linux机箱上的程序运行时,它们会随着程序的运行定期从中添加和删除数据。堆栈大小是指在内存中为堆栈分配了多少空间。如果增加堆栈大小,则允许程序增加可调用的例程数。每次调用函数时,都可以将数据添加到堆栈中(堆叠在最后一个例
ulimit -a
查看我的框的限制是多少,它被设置为8192kb
,这似乎是默认值
什么是“linux堆栈”?它是如何工作的,它存储了什么,它做了什么?简单的回答是:
当linux机箱上的程序运行时,它们会随着程序的运行定期从中添加和删除数据。堆栈大小是指在内存中为堆栈分配了多少空间。如果增加堆栈大小,则允许程序增加可调用的例程数。每次调用函数时,都可以将数据添加到堆栈中(堆叠在最后一个例程数据的顶部)
除非程序非常复杂,或者是为特殊目的而设计的,否则8192kb的堆栈大小通常是合适的。一些程序,如图形处理程序,需要增加堆栈的大小才能正常工作。因为它们可能会在堆栈上存储大量数据
可以随意增加这些应用程序的堆栈大小,这不是问题。为此,请使用
ulimit-s字节
顺便说一句,堆栈溢出可能会出现太深(或无限)的递归。或者在C代码中滥用
alloca
(或等效的,如可变长度数组)。相关:|非常感谢您的回答。我在Ruby应用程序中遇到了一个SystemStackError:stack level太深的错误,我想在继续调查之前更好地了解基本原理。