在堆栈上分配大缓冲区

3

在 Linux 系统中如果栈空间足够,分配大容量的缓冲区是不是只是“不好的习惯”?我指的是在堆栈中分配 300-500 KB 对象,在 8 MB 堆栈中。或者这样做会引起任何错误吗? 此外,有没有关于如何使用堆栈内存的指导方针?


2
这取决于您的用例(我们不知道)。 经验法则是:缓冲区越大,在堆栈上分配它就越糟糕。 - Jabberwocky
如果这还不够,您可以更改进程资源限制,因此8 MB只是默认限制而不是硬编码。您可以使用以下命令更改堆栈大小:ulimit -s 8192 - foragerDev
3
危险了。一个函数不是孤立存在的,它会被其他函数调用,那些函数可能有它们自己在栈上分配的变量,并且可以被其他函数调用,甚至可能是某个递归算法的一部分。栈分配是被“堆叠”的。 - Eugene Sh.
是的,有讨论和指南,以及无限的意见。例如像这个:何时使用堆栈或堆内存 - ryyker
我的个人限制是堆栈缓冲区为1 kiB。 - prapin
2个回答

1

关于栈分配变量的大小,没有硬性规定。

一般来说,我不希望有任何大于约10KB的栈分配。这样避免出现栈空间不足的问题的可能性就会更小。任何比这更大的变量应该动态分配,然后在不再需要时释放。


1

是的,这是一种不好的习惯。那么大的对象应该是动态分配的(或静态的)。没有例外。

如果你的程序有一天要在默认堆栈大小较小的系统上使用呢?例如Windows.. 那么你可能会在一个函数调用中就“吃掉”一半的堆栈。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接