分配了alloca的内存在函数结束时或范围结束时被释放?
如果我有这样的function:
void bla(int size) { while(b){ char tmp[size]; ...... } }
tmp在while循环的每次迭代中被释放,对吗?
如果我写这个函数:
void bla(int size) { while(b){ char* tmp = alloca(size); ...... } }
tmp在范围结束时或function结束时被释放?
它将在函数结束时释放,但由于你在循环中调用alloca()
,你可能会得到堆栈溢出。 如果函数内的size
没有改变,你应该在循环之前调用alloca()
。
alloca
在堆栈上分配并且不知道作用域,因此在离开堆栈帧后(=离开函数后)它被释放。
当函数退出时,使用alloca()
分配的内存将被释放。 有关详细信息,请参阅手册页 。
关于前一种情况,只是范围内的自动变量,我不确定如何定义它被“释放”。 您不能在定义它的范围之外引用它,如果它有一个初始化程序,它将在每次迭代时重新初始化。