首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放alloca分配的内存

释放alloca分配的内存
EN

Stack Overflow用户
提问于 2008-11-12 04:18:57
回答 8查看 5.5K关注 0票数 9

在当前函数退出之前,是否可以显式地释放由C的alloca()分配的内存?如果是这样的话,是怎么做的?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-12 04:28:18

这是可能的,但没有预先编写的函数来做这件事。您必须深入研究编译器的alloca()实现,以找出它在做什么,然后编写您自己的freea()。由于每个编译器执行alloca()的方式不同,因此您必须为每个编译器重写freea()。

但我发现很难相信这是值得的。如果您需要显式地释放它,只需使用malloc/free -这些函数通常都经过了大量优化。充分利用它们。

票数 10
EN

Stack Overflow用户

发布于 2008-11-12 04:25:51

来自http://www.gnu.org/software/libc/manual/html_mono/libc.html#Variable-Size-Automatic

使用alloca分配一个块是一个显式的操作;您可以根据需要分配任意多的块,并在运行时计算大小。但是,当您退出从中调用alloca的函数时,所有块都会被释放,就像它们是在该函数中声明的自动变量一样。无法显式释放空间。

票数 11
EN

Stack Overflow用户

发布于 2008-11-12 04:23:18

你正在使用alloca()在堆栈上进行分配;如果之后发生了其他事情(而且你不能控制它,除非用汇编语言写所有的东西),你不能只是缩小堆栈。所以,除非你离开函数的堆栈框架,否则这是不可能的。

这也是为什么如果你使分配的缓冲区溢出,你会把事情搞得一团糟。你可以开始覆盖你的函数返回的代码的地址,导致它跳转到其他地方,所有可怕的东西。注意!

Malloc在堆上工作,这就是为什么它可以做更灵活的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/283024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档