C中的alloca函数

Posted

技术标签:

【中文标题】C中的alloca函数【英文标题】:alloca function in C 【发布时间】:2012-02-27 00:25:06 【问题描述】:

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

【问题讨论】:

以下链接表明alloc 是一个不同的功能:cboard.cprogramming.com/c-programming/… 我认为你是对的。我认为这是他们的分配器示例实现.. 您正在修改 K&R?你一定很聪明。 我知道它“有点”过时了,但不知道任何其他可以指导我了解基础知识的资源。有什么建议吗? 【参考方案1】:

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

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

    动态内存分配 范围(当需要在函数调用之间保留内存时)

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

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

【讨论】:

@NickA 我希望哈里斯做到了。无论如何我都修好了。【参考方案2】:

malloccallocrealloc 函数在堆上分配空间。

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

第三段怎么强调都不过分。使用 alloca 或 VLA 几乎没有安全的方法。

以上是关于C中的alloca函数的主要内容,如果未能解决你的问题,请参考以下文章

C:malloc/calloc/realloc/alloca内存分配函数

C alloca 函数 - 当试图分配太多内存时会发生啥

alloca 函数范围内的 goto 是不是有效?

禁用优化的 c alloca 函数的奇怪汇编代码 - gcc 使用 DIV 和 IMUL 为常数 16,并转换?

在 C 中模拟 `alloca()`

Alloca 实施