Q什么是alloca以及为什么不推荐使用它?
A alloca分配内存,该内存会在调用它的函数alloca返回时自动释放。也就是说,使用alloca分配的内存仅限于某个特定函数的“栈帧”或上下文。
alloca无法移植地编写,[脚注] 并且在没有传统栈的机器上难以实现。当它的返回值直接传递给另一个函数时,其使用是成问题的(并且在基于栈的机器上的明显实现会失败),例如fgets(alloca(100), 100, stdin)。 [脚注]
出于这些原因,alloca不是标准的,也不能用于必须广泛移植的程序,无论它多么有用。现在 C99 支持可变长度数组(VLA),它们可以更清晰地完成alloca过去曾经完成的大部分任务。
另请参阅问题 7.22。
附加链接:Gordon L. Burditt 的一篇文章,描述了实现和使用alloca
的困难。参考文献:Rationale Sec. 4.10.3