【发布时间】:2017-06-14 15:37:33
【问题描述】:
引用BUGS 部分的第二段,来自alloca(3) 的手册页
在许多系统上,
alloca()不能在函数调用的参数列表中使用,因为堆栈alloca()保留的空间将出现在堆栈中函数参数空间的中间。
我没有看到这是怎么发生的。以如下代码为例:
void f(int a, void * b, int c);
int
main(void)
{
f(1, alloca(100), 2);
}
根据我的理解,alloca 将 main 的堆栈帧向下扩展 100 个字节(通过修改堆栈指针寄存器),然后传递指向该堆栈内存块的指针(以及 2 个 ints)在f 的堆栈帧上。所以分配的空间不应该在a、b或c的中间,实际上它应该在不同的帧上(在这种情况下是在main的帧上)。
那么这里有什么误解呢?
【问题讨论】:
标签: c stack allocation alloca