这个问题听起来可能相当初级,但这是我与另一位共事的开发人员进行的辩论。
我小心翼翼地在可能的地方堆栈分配东西,而不是堆分配它们。他正在和我说话,看着我的肩膀并评论说这没有必要,因为它们在性能方面是相同的。
我一直认为堆的增长是恒定的时间,堆分配的性能取决于堆的当前复杂性,用于分配(找到适当大小的孔)和取消分配(折叠孔以减少碎片,如如果我没记错的话,许多标准库实现在删除期间需要时间来执行此操作)。
这让我觉得可能非常依赖编译器。特别是对于这个项目,我将Metrowerks编译器用于PPC架构。了解这种组合会很有帮助,但总的来说,对于 GCC 和 MSVC++,情况如何?堆分配的性能不如堆栈分配吗?没有区别吗?或者差异如此之小以至于变得毫无意义的微优化。
堆栈分配要快得多,因为它真正所做的只是移动堆栈指针。使用内存池,您可以从堆分配中获得相当的性能,但这会稍微增加复杂性并带来一些麻烦。
此外,堆栈与堆不仅是性能考虑因素;它还告诉你很多关于对象的预期生命周期的信息。