在当前函数退出之前,是否可以显式地释放由C的alloca()分配的内存?如果是这样的话,是怎么做的?
发布于 2008-11-12 04:28:18
这是可能的,但没有预先编写的函数来做这件事。您必须深入研究编译器的alloca()实现,以找出它在做什么,然后编写您自己的freea()。由于每个编译器执行alloca()的方式不同,因此您必须为每个编译器重写freea()。
但我发现很难相信这是值得的。如果您需要显式地释放它,只需使用malloc/free -这些函数通常都经过了大量优化。充分利用它们。
发布于 2008-11-12 04:25:51
来自http://www.gnu.org/software/libc/manual/html_mono/libc.html#Variable-Size-Automatic
使用
alloca分配一个块是一个显式的操作;您可以根据需要分配任意多的块,并在运行时计算大小。但是,当您退出从中调用alloca的函数时,所有块都会被释放,就像它们是在该函数中声明的自动变量一样。无法显式释放空间。
发布于 2008-11-12 04:23:18
你正在使用alloca()在堆栈上进行分配;如果之后发生了其他事情(而且你不能控制它,除非用汇编语言写所有的东西),你不能只是缩小堆栈。所以,除非你离开函数的堆栈框架,否则这是不可能的。
这也是为什么如果你使分配的缓冲区溢出,你会把事情搞得一团糟。你可以开始覆盖你的函数返回的代码的地址,导致它跳转到其他地方,所有可怕的东西。注意!
Malloc在堆上工作,这就是为什么它可以做更灵活的事情。
https://stackoverflow.com/questions/283024
复制相似问题