分配了alloca的内存在函数结束时或范围结束时被释放?

Dam*_*ian 9 c stack allocation

如果我有这样的功能:

void bla(int size) {
    while(b){
        char tmp[size];
        ......
    }
}
Run Code Online (Sandbox Code Playgroud)

tmp在while循环的每次迭代中被释放,对吗?

如果我写这个函数:

void bla(int size) {
    while(b){
        char* tmp = alloca(size);
        ......
    }
}
Run Code Online (Sandbox Code Playgroud)

tmp在范围结束时或功能结束时被释放?

sha*_*oth 8

它将在函数结束时释放,但由于你alloca()在循环内调用,你可能会得到堆栈溢出.如果size在函数内没有改变,你应该alloca()在循环之前调用.