什么是“堆猪”

时间:2013-07-09 01:12:12

标签: linux kernel

在讨论Linux内核时“堆栈生猪”是什么意思?

我在一些Linux内核书籍(Wolfgang Mauerer的专业Linux内核架构)中读到了这个概念,但“堆栈生猪”到底意味着什么呢?感谢。

2 个答案:

答案 0 :(得分:1)

“Stack hog”是一个非正式的名称,用于描述使用大量自动存储(AKA“堆栈”)的函数。究竟什么是“占用”因执行环境而异:通常,内核级函数对堆栈空间有更严格的限制 - 只有几千字节,因此在内核模式下被认为是“堆栈占用”的函数可能会变得“好”公民“在用户模式。

函数成为堆栈占用的一个常见原因是在自动内存中分配缓冲区或其他数组。这样更方便,因为您不需要记住释放内存并检查分配结果。您还可以在分配本身上节省一些CPU周期。缺点是堆栈溢出的可能性,导致内核级程序的恐慌。这就是为什么“堆栈占用”的常见补救措施是将一些缓冲区移动到动态内存中。

答案 1 :(得分:1)

Linux内核使用4K堆栈。使用过量的小空间被认为是一种生猪。如果你是“懒惰”并在堆栈上分配一个缓冲区,或者有一个带有大量参数的函数,那就是生猪。

堆栈必须包含服务系统调用所需的任何调用序列以及可能被调用的任何中断处理程序。因此,节省堆栈空间非常重要。