C中的alloca函数

时间:2012-02-04 21:25:07

标签: c alloca

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

3 个答案:

答案 0 :(得分:22)

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

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

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

答案 1 :(得分:3)

malloccallocrealloc函数在堆上分配空间。

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

答案 2 :(得分:0)

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

malloc()可以用于某些原因,其中一些是

  1. 动态内存分配
  2. 范围(当需要在函数调用之间保留内存时)
  3. 但是,添加malloc()的一项额外工作是我们必须明确free()分配的内存。

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