虽然问一个问题(也是前)我想知道我怎么判断是否在堆上创建一个对象或保持它作为堆栈上的对象? 我应该问自己关于对象作出正确的分配?
Answer 1:
如果你可以把它放在堆,如果你有,堆栈。
你需要什么样的事情提上堆? 不同长度的任何东西。 任何对象都可能需要为空。 凡是是非常大的,免得你造成堆栈溢出。
Answer 2:
简单的答案。
当它超出范围,你希望它流连并能够使用它?
Answer 3:
取决于对象的预期寿命。
- 如果你希望对象即使在函数返回时是活着的,然后堆,否则STACK
如果对象被放置在堆中,那么它必须是明确的分类()'编或由程序员删除,一旦它的使用已经结束; 否则程序将内存泄漏。
Answer 4:
两个原因使用堆:
1 - 你想在当前范围后的数据。
2 - 你想保留大内存。
除此之外,留在堆栈中。
注意:不储备大量的内存堆栈上,否则你会得到一个“堆栈溢出”;)
Answer 5:
栈内存快。 这是快,因为(一)不存在系统开销分配内存 - 分配是通过简单地在一个指令和(b)在堆栈内存是“热”移动堆栈指针这样做,它已经在缓存中。 堆内存是缓慢的,因为(a)它需要大量的系统工作,环顾四周,发现内存空闲块和(b)可能不是在缓存中,将需要一些逐出数据,你可能会想。
栈内存没有得到碎片。 这可能是一个堆最终变得如此支离破碎,你不能分配任何东西(尽管具有讽刺意味仍有足够的未使用的内存!)
对于长期居住的数据和大数据(多KB或更多),你必须使用一个堆。
分配更大的栈的危险是,如果正在运行多个线程它可能伤害你。 你必须大小的堆栈的“最坏情况”的用法。 每个线程需要有自己的堆栈。 在高核心计数机(你可能有200多个线程中运行),你可能不希望随意增加堆栈。 在另一方面堆不需要的大小为“最坏情况”的使用 - 这是更有效的。
文章来源: C++ When to allocate on heap vs stack?