alloca的用途是什么?

Kod*_*ior 2 c alloca dynamic-memory-allocation stack-memory

可能重复:
在哪些情况下alloca()有用吗?

我最近碰巧看到了alloca()函数的使用.谷歌搜索告诉我,它用于在堆栈上分配空间.我无法抓住申请表吗?此外,使用它有任何陷阱吗?

Ker*_* SB 5

该功能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分配的内存没有等效的机制.