为什么alloc( )
像这样调用另一个函数调用的参数func(x, alloca(size), z);
被认为是错误的根据一本书叫the linux programming interface
这是因为由 alloca() 分配的堆栈空间将出现在函数参数空间的中间(放置在堆栈框架内的固定位置)。相反,我们必须使用如下代码:
void *y; y = alloca(size); func(x, y, z);
虽然这是错误的
func(x, alloca(size), z); /* WRONG! */
不是这两个部分应该是等价的吗?在第一个alloca
被func
调用时,它的返回值被调用,所以如果有人可以解释如何alloca
在堆栈上分配内存,这使得两种方法都不同。