当前位置:  开发笔记 > 前端 > 正文

释放alloca分配的内存

如何解决《释放alloca分配的内存》经验,为你挑选了2个好方法。

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



1> Jeremy Ruten..:

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

分配块alloca是一个明确的动作; 您可以根据需要分配任意数量的块,并在运行时计算大小.但是当你退出调用alloca的函数时,所有的块都被释放,就好像它们是在该函数中声明的自动变量一样.没有办法明确释放空间.



2> Walter Brigh..:

这是可能的,但没有预先编写的功能.您必须深入研究编译器的alloca()实现,以弄清楚它在做什么,然后编写自己的freea().由于每个编译器都以不同方式执行alloca(),因此您必须为每个编译器重写freea().

但我发现很难相信这会值得这么麻烦.如果你需要明确地释放它,只需使用malloc/free - 这些功能通常都经过了大量优化.利用它们.


一个可移植的实现是"void freea(void*p){} //假装它".
我已经实现了alloca(),是的,你可以做一个freea().除了alloca()之外,你不会重新定位项目 - 带有地址的本地人必须在alloca'd空间之前.无论如何,你不应该把悬空指针留给freea'd空间,不仅仅是为了自由空间.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有