我已经搜索了一段时间,但对于为什么值类型必须分配在堆栈上而引用类型(即动态内存或对象必须驻留在堆上)没有结论性的答案。 为什么不能在堆栈上分配相同的值?
最佳答案
他们可以。实际上,它们并非如此,因为堆栈通常是比堆更稀缺的资源,并且在堆栈上分配引用类型可能会很快耗尽它。此外,如果函数返回在其堆栈上分配的数据,则需要在调用者方面复制语义,否则可能会面临返回将被下一个函数调用覆盖的内容的风险。
值类型(通常是局部变量)可以使用 native 机器指令快速轻松地带入和带出范围。返回值类型的复制语义很简单,因为大多数都适合机器寄存器。这种情况经常发生,并且应该尽可能便宜。
关于memory - 为什么内存分配需要栈和堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063985/