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】:malloc
、calloc
和 realloc
函数在堆上分配空间。
free
函数“释放”这些函数先前分配的空间。
【讨论】:
【参考方案3】:我认为您的意思是alloca
用于在堆栈上分配内存。是的,这与在堆上分配的malloc
和free
不同。
不要尝试释放用alloca
分配的内存,因为当调用alloca
的函数返回给它的调用者时,它会自动释放。
使用alloca
和/或C99 可变长度数组可能是一项有风险的业务,因为如果您不谨慎地使用这些工具,很容易导致堆栈溢出。
【讨论】:
第三段怎么强调都不过分。使用alloca
或 VLA 几乎没有安全的方法。以上是关于C中的alloca函数的主要内容,如果未能解决你的问题,请参考以下文章
C:malloc/calloc/realloc/alloca内存分配函数