引用部分的第二段BUGS
,来自手册页alloca(3)
在许多系统
alloca()
上不能在函数调用的参数列表中使用,因为保留的堆栈空间alloca()
将出现在函数参数空间中间的堆栈上。
我没有看到这将如何发生。以以下代码为例:
void f(int a, void * b, int c);
int
main(void)
{
f(1, alloca(100), 2);
}
根据我的理解,alloca
将堆栈帧向下扩展main
100 个字节(通过修改堆栈指针寄存器),然后将指向该堆栈内存块的指针(连同 2int
秒)在堆栈帧上传递给f
. 所以分配的空间不应该在a
,b
或者的中间c
,实际上它应该在不同的框架上(main
在这种情况下是在框架上)。
那么这里有什么误解呢?