在堆栈上分配的最大数量应该是多少?

4

我一直在Stack Overflow上搜索有关在堆栈上分配的最大内存量的指南。

我看到了堆栈与堆分配的最佳实践,但没有任何关于应该在堆栈上分配多少内存和应该在堆上分配多少内存的指南。

有什么想法/数字可以用作指南吗?何时应该在堆栈上分配,何时应该在堆上分配,以及多少是太多?


栈通常有约1MB的大小,因此在此范围内。 - chris
2
如果必须询问,那么你就负担不起。 - R.. GitHub STOP HELPING ICE
3个回答

4

在典型情况下,栈的大小限制在大约1-4兆字节左右。为了留出空间给代码的其他部分,如果可能的话,你通常希望将单个栈帧限制在几十千字节以下。当递归涉及到或可能涉及到时,你通常需要将其限制得更少。


1
这里的答案取决于代码运行的环境。在一个小型嵌入式系统上,整个堆栈可能只有几千字节。在桌面上运行的大型系统中,堆栈通常是几兆字节。
对于桌面/大型嵌入式系统,几千字节通常是可以接受的。对于小型嵌入式系统,可能完全不适用。
另一方面,过度使用堆可能会导致频繁调用new/delete时出现过多开销。因此,在典型情况下,您不应该为非常小的对象使用堆分配 - 除非从其他设计标准(例如,您需要指针永久存储在某个地方,并且堆栈无法处理当前函数返回之前未完成对象的情况)来看是必要的。

当然,重要的是整体设计。如果您有一个非常简单的应用程序,具有几个函数,其中没有一个是递归的,那么在main或高级别上分配几百千字节可能是可以的。另一方面,如果您正在制作一个通用库,使用超过几千字节可能不会使使用该库的开发人员喜欢您。而且,如果该库正在开发以运行在低内存系统上(例如洗衣机,老式手机等),那么使用超过几百字节可能是个坏主意。


0

尽可能在堆栈上分配最小的空间。对于数据集,请使用堆,否则堆栈分配将贯穿范围的生命周期,可能会导致高速缓存错误。


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