我一直在搜索 Stack Overflow ,以获取应该在堆栈上分配的最大内存量的指南。
我看到了堆栈与堆分配的最佳实践,但是指南中没有数据应该在堆栈上分配多少以及应该在堆上分配多少。
我可以将任何想法/数字用作指南吗?什么时候我应该在堆栈上分配堆和多少呢?
答案 0 :(得分:3)
在典型情况下,堆栈限制在1-4兆字节左右。要为代码的其他部分留出空间,通常需要将单个堆栈帧限制为不超过几十千字节(如果可能)。当/如果涉及递归(或可能得到)时,您通常希望将其限制得比这更多。
答案 1 :(得分:0)
尽可能小地在堆栈上分配。将堆用于数据集,否则堆栈分配将贯穿范围的生命,可能会破坏缓存。
答案 2 :(得分:0)
这里的答案取决于代码运行的环境。在小型嵌入式系统上,整个堆栈可能只有几千字节。在桌面上运行的大型系统上,堆栈通常为兆字节。
对于桌面/大型嵌入式系统,几千字节通常很好。对于小型嵌入式系统,可能根本不能正常工作。
另一方面,在频繁调用new / delete时过度使用堆会导致过多的开销。所以在典型的情况下,你不应该为非常小的对象使用堆分配 - 除非有必要从其他设计标准(例如,你需要一个指针永久存储在某个地方,并且当你从当前返回时堆栈将无法工作)在对象完成之前的函数)。
当然,重要的是整体设计。如果你有一个非常简单的应用程序,有一些函数,没有一个是递归的,那么在main
或上面的级别分配几百千字节可能没问题。另一方面,如果您要创建一个通用的库,使用超过几千字节可能不会让您受到使用该库的开发人员的欢迎。如果开发库是为了在低内存系统(在洗衣机,旧式手机等)上运行,那么使用超过几百个字节可能是一个坏主意。