我正在修改 C 并遇到了 alloca/free 函数,它被描述为在像空间一样的堆栈上分配存储。这和 malloc/free 一样吗?或者这是不同的东西?谢谢。
问问题
9753 次
3 回答
22
我认为您的意思alloca
是用于在堆栈上分配内存。是的,这malloc
与free
在堆上分配不同。
不要试图释放分配的内存,alloca
因为当调用的函数alloca
返回给它的调用者时它会自动释放。
使用alloca
和/或 C99 可变长度数组可能是一项有风险的业务,因为如果您不谨慎地使用这些工具,很容易使堆栈溢出。
于 2012-02-04T21:28:00.873 回答
3
malloc
,calloc
和realloc
函数在堆上分配空间。
free
函数“释放”这些函数先前分配的空间。
于 2012-02-04T21:28:15.787 回答
0
在旧答案中添加一些额外信息。
malloc()
可以使用的原因很少,其中一些是
- 动态内存分配
- 范围(当需要在函数调用之间停留的内存时)
但是,增加的一项额外工作malloc()
是我们必须显式free()
分配内存。
因此,为了只使用动态内存分配功能,并避免 的开销free()
,可以alloca()
在他们的程序中使用。这之所以成为可能,是因为在使用时内存是在堆栈上分配的(如其他答案所述)alloca()
。
于 2015-09-01T13:24:48.503 回答