7.9 C语言中alloca()是什么?为什么不提倡使用它?
在调用alloca() 的函数返回的时候, 它分配的内存会自动释放。也就是说, 用alloca 分配的内存在某种程度上局部于函数的“堆栈帧” 或上下文中。
alloca() 不具可移植性, 而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题, 如fgets(alloca(100), 100, stdin)。
由于这些原因, alloca() 不合标准, 不宜使用在必须广泛移植的程序中, 不管它可能多么有用。既然C99 支持变长数组(VLA), 它可以用来更好的完成alloca() 以前的任务。
参见问题7.19。
alloca() 不具可移植性, 而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题, 如fgets(alloca(100), 100, stdin)。
由于这些原因, alloca() 不合标准, 不宜使用在必须广泛移植的程序中, 不管它可能多么有用。既然C99 支持变长数组(VLA), 它可以用来更好的完成alloca() 以前的任务。
参见问题7.19。