为什么alloca与创建局部变量不同?

Joh*_*0te 4 c unix

我读到有一个名为alloca的函数,它从当前函数的堆栈帧而不是堆中分配内存.当函数退出时,内存会自动销毁.

这有什么意义,它与仅在函数中创建结构数组或局部变量有什么不同?它们会进入堆栈并在函数结束时被销毁.

PS:我看到了另一个alloca问题而且没有回答这两个事情是如何不同的:)

Rob*_*edy 9

使用时alloca,可以指定运行时所需的字节数.使用局部变量,金额在编译时固定.请注意,alloca早于C的可变长度数组.


xan*_*tos 6

随着alloca你可以创建一个动态数组(的东西,通常需要malloc),这是非常快的.这里有GCC的优点和缺点alloca:

http://www.gnu.org/s/hello/manual/libc/Variable-Size-Automatic.html#Variable-Size-Automatic