c - alloca有什么应用?

标签 c dynamic-memory-allocation alloca stack-memory

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/

相关文章:

c - 如何分配内存给 int (*a)[2]?

linux - 汇编 x86 brk() 调用使用

c - alloca(n) 和 char x[n] 有什么区别?

c++ - 什么时候为类成员释放使用 alloca 分配的内存?

c - 释放 void 指针数组的元素

c - alloca 而不是 alsa 中的局部变量

有人可以解释这个 C 输出吗?

c - 如何接受用户定义的变量?

c - 在 Linux 上的 valgrind 中有内存泄漏的 C 程序,但我已经从 malloc() 中释放了内存

C 气泡问题