首页 > 解决方案 > C++ 我应该在堆还是栈上分配大型结构?

问题描述

new我应该考虑使用关键字(或任何其他动态分配方法)而不是堆栈在堆/空闲存储上分配什么结构大小?

10 个字节?20字节?200 字节?2KB?2MB?绝不?

即使我想通过指针传递它,我仍然可以从堆栈变量中获取引用。我知道堆栈变量会在范围结束时消失,而动态分配的变量不会。无论哪种方式我都可以处理,但到目前为止,我还没有找到任何关于何时动态分配的指导。当然,通过不要在堆栈上放太多东西来避免堆栈溢出......但是有多少是太多了?

任何指导将不胜感激。

标签: c++stack

解决方案


真正回答这个问题,您需要知道:

  • 堆栈有多大。这通常可以在编译时进行配置,但可能会受到目标平台的限制。

  • 堆栈上已经有什么了。该知识可以通过使用确定性调用图或通过根据堆栈指针的当前值主动做出决策来获得。

如果没有上述所有因素,任何被动决定都将是一场赌博。这也意味着默认情况下这是一场赌博——事实上,在大多数情况下,我们必须相信编译器开发人员了解“典型”程序需要多少堆栈空间,并且我们对“典型”程序的看法确实一致并且经常。

从长远来看,就像任何优化问题一样,把赌注放在测量整体性能和测试可能导致堆栈溢出的边缘情况上。


推荐阅读