10

我正在修改 C 并遇到了 alloca/free 函数,它被描述为在像空间一样的堆栈上分配存储。这和 malloc/free 一样吗?或者这是不同的东西?谢谢。

4

3 回答 3

22

我认为您的意思alloca是用于在堆栈上分配内存。是的,这mallocfree在堆上分配不同。

不要试图释放分配的内存,alloca因为当调用的函数alloca返回给它的调用者时它会自动释放。

使用alloca和/或 C99 可变长度数组可能是一项有风险的业务,因为如果您不谨慎地使用这些工具,很容易使堆栈溢出。

于 2012-02-04T21:28:00.873 回答
3

malloc,callocrealloc函数在堆上分配空间。

free函数“释放”这些函数先前分配的空间。

于 2012-02-04T21:28:15.787 回答
0

在旧答案中添加一些额外信息。

malloc()可以使用的原因很少,其中一些是

  1. 动态内存分配
  2. 范围(当需要在函数调用之间停留的内存时)

但是,增加的一项额外工作malloc()是我们必须显式free()分配内存。

因此,为了只使用动态内存分配功能,并避免 的开销free(),可以alloca()在他们的程序中使用。这之所以成为可能,是因为在使用时内存是在堆栈上分配的(如其他答案所述)alloca()

于 2015-09-01T13:24:48.503 回答