释放alloca分配的内存

dsi*_*cha 8 optimization memory-management

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

Jer*_*ten 9

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

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


Wal*_*ght 8

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

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

  • 一个可移植的实现是"void freea(void*p){} //假装它". (6认同)
  • 我已经实现了alloca(),是的,你可以做一个freea().除了alloca()之外,你不会重新定位项目 - 带有地址的本地人必须在alloca'd空间之前.无论如何,你不应该把悬空指针留给freea'd空间,不仅仅是为了自由空间. (6认同)