c++ - C++ 我应该在堆还是栈上分配大型结构?
问题描述
new
我应该考虑使用关键字(或任何其他动态分配方法)而不是堆栈在堆/空闲存储上分配什么结构大小?
10 个字节?20字节?200 字节?2KB?2MB?绝不?
即使我想通过指针传递它,我仍然可以从堆栈变量中获取引用。我知道堆栈变量会在范围结束时消失,而动态分配的变量不会。无论哪种方式我都可以处理,但到目前为止,我还没有找到任何关于何时动态分配的指导。当然,通过不要在堆栈上放太多东西来避免堆栈溢出......但是有多少是太多了?
任何指导将不胜感激。
解决方案
要真正回答这个问题,您需要知道:
堆栈有多大。这通常可以在编译时进行配置,但可能会受到目标平台的限制。
堆栈上已经有什么了。该知识可以通过使用确定性调用图或通过根据堆栈指针的当前值主动做出决策来获得。
如果没有上述所有因素,任何被动决定都将是一场赌博。这也意味着默认情况下这是一场赌博——事实上,在大多数情况下,我们必须相信编译器开发人员了解“典型”程序需要多少堆栈空间,并且我们对“典型”程序的看法确实一致并且经常。
从长远来看,就像任何优化问题一样,把赌注放在测量整体性能和测试可能导致堆栈溢出的边缘情况上。
推荐阅读
- python - 列表中的最后一个对象在删除后不会被删除。何时有效删除?
- sql - PostgreSQL - 将记录插入表并返回结果
- c++ - 如何在 Direct2D 窗口中正确初始化 Directwrite IDWriteTextLayout
- arrays - 在 foreach 循环中将一些变量添加到数组中
- android - 我如何追踪有影响力的人安装了多少我的 Android 应用程序?
- anylogic - AnyLogic 灵敏度分析可视化
- python - 尽管使用 Pip 安装 Pygame,但无法将 Pygame 导入 Python 3.7 IDLE(64 位)
- java - HHH000327:执行加载命令时出错:org.hibernate.exception.GenericJDBCException:无法提取结果集
- c++ - C++ 为什么 cin 读行两次?
- batch-file - 如何批量取消引用值