我一直在Stack Overflow上搜索有关在堆栈上分配的最大内存量的指南。
我看到了堆栈与堆分配的最佳实践,但没有任何关于应该在堆栈上分配多少内存和应该在堆上分配多少内存的指南。
有什么想法/数字可以用作指南吗?何时应该在堆栈上分配,何时应该在堆上分配,以及多少是太多?
在典型情况下,栈的大小限制在大约1-4兆字节左右。为了留出空间给代码的其他部分,如果可能的话,你通常希望将单个栈帧限制在几十千字节以下。当递归涉及到或可能涉及到时,你通常需要将其限制得更少。
当然,重要的是整体设计。如果您有一个非常简单的应用程序,具有几个函数,其中没有一个是递归的,那么在main
或高级别上分配几百千字节可能是可以的。另一方面,如果您正在制作一个通用库,使用超过几千字节可能不会使使用该库的开发人员喜欢您。而且,如果该库正在开发以运行在低内存系统上(例如洗衣机,老式手机等),那么使用超过几百字节可能是个坏主意。
尽可能在堆栈上分配最小的空间。对于数据集,请使用堆,否则堆栈分配将贯穿范围的生命周期,可能会导致高速缓存错误。