Possible Duplicate:
In which cases is alloca() useful?
我最近偶然看到alloca()函数的使用。谷歌搜索告诉我它是用来分配堆栈空间的。我无法获取该应用程序?另外,使用这个有什么陷阱吗?
最佳答案
函数alloca
从来都不是任何C标准的一部分。它通常由供应商作为扩展提供,以实现 C99 中的可变长度数组(“VLA”)之类的功能:
void foo(int n)
{
char arr99[n]; // C99-style VLA
char * p89 = alloca(n); /* C89 work-around using "alloca" */
// Usage:
for (int i = 0; i != n; ++i)
{
arr99[i] = p89[i] = '0' + i;
}
} // memory is freed automatically here
在这两种情况下,内存都会在函数结束时自动管理和释放。
使用alloca
会造成精神负担,因为它不太适合C对象模型。例如,即使您在嵌套作用域中分配内存,它也会保持事件状态,直到封闭的函数结束,而不仅仅是 block 结束。 VLA 具有更好的语义,并且可以使用动态 sizeof
进行查询,而对于 alloca
分配的内存没有等效的机制。
关于c - alloca有什么应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532550/