memory - 为什么内存分配需要栈和堆

标签 memory dynamic heap-memory stack-memory

我已经搜索了一段时间,但对于为什么值类型必须分配在堆栈上而引用类型(即动态内存或对象必须驻留在堆上)没有结论性的答案。 为什么不能在堆栈上分配相同的值?

最佳答案

他们可以。实际上,它们并非如此,因为堆栈通常是比堆更稀缺的资源,并且在堆栈上分配引用类型可能会很快耗尽它。此外,如果函数返回在其堆栈上分配的数据,则需要在调用者方面复制语义,否则可能会面临返回将被下一个函数调用覆盖的内容的风险。

值类型(通常是局部变量)可以使用 native 机器指令快速轻松地带入和带出范围。返回值类型的复制语义很简单,因为大多数都适合机器寄存器。这种情况经常发生,并且应该尽可能便宜。

关于memory - 为什么内存分配需要栈和堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063985/

相关文章:

android - 高分辨率手机内存不足错误

C、free() 上的内存损坏(快速)错误

简单 C 程序的令人困惑的缓存行为

c++ - 为什么我的程序使用的内存在运行时不断增长?

javascript - 动态添加的 JavaScript 在 IE 中找不到动态添加的字段

Angular2 i18n语言切换

c++ - 结构对象析构函数

Java使用volatile关键字内存效率高吗?

c# - 将第一个 child 与 linq dynamic 进行比较

C 防止堆溢出