Kod*_*ior 2 c alloca dynamic-memory-allocation stack-memory
可能重复:
在哪些情况下alloca()有用吗?
我最近碰巧看到了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
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,内存都会在功能结束时自动管理和释放.
使用alloca是精神上的负担,因为它不太适合C对象模型.例如,即使您在嵌套作用域中分配内存,它也会保持活动直到封闭函数结束,而不仅仅是块.VLA具有更好的语义,并且可以用动态查询sizeof,而对于已alloca分配的内存没有等效的机制.