【发布时间】:2014-12-05 10:26:11
【问题描述】:
在堆栈上分配东西非常棒,因为我们有 RAII 并且不必担心内存泄漏等问题。但是有时我们必须在堆上分配:
如果数据真的很大(推荐)——因为堆栈很小。
如果要分配的数据大小只有在运行时才知道(动态分配)。
两个问题:
为什么我们不能分配动态内存(即大小为 仅在运行时知道)在堆栈上?
为什么我们只能通过指针来引用堆上的内存,而堆栈上的内存可以通过普通变量来引用? IE。
Thing t;。
编辑:我知道一些编译器支持可变长度数组 - 这是动态分配的堆栈内存。但这确实是一般规则的例外。我有兴趣了解为什么我们不能在堆栈上分配动态内存的根本原因——技术原因和背后的原因。
【问题讨论】:
-
是的,我们可以。
int test(int n) { int array[n]; }自 C99 起有效。哦,如果你说的是 C++,那么 C++14 中引入了可变长度数组 -
内存相关的RAII实际上是关于通过自动存储持续时间(或您所说的“堆栈”)变量来管理动态分配的内存。
-
如果你放弃这个“堆栈”与“堆”术语会更好。
标签: c++ pointers memory-management heap-memory stack-memory