c/c++开发分享分配了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()分配的内存将被释放。 有关详细信息,请参阅手册页 。

    关于前一种情况,只是范围内的自动变量,我不确定如何定义它被“释放”。 您不能在定义它的范围之外引用它,如果它有一个初始化程序,它将在每次迭代时重新初始化。

      以上就是c/c++开发分享分配了alloca的内存在函数结束时或范围结束时被释放?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545877.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注