Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;发布_alloca“;从堆栈中删除内存_C++_Alloca - Fatal编程技术网

C++ c++;发布_alloca“;从堆栈中删除内存

C++ c++;发布_alloca“;从堆栈中删除内存,c++,alloca,C++,Alloca,我知道alloca的行为是在离开函数时释放堆栈中的内存。有没有一种方法可以更早地释放内存?没有(不包括显式地弄乱堆栈,例如在asm块中),但是如果您需要这样的东西,您可以使用and 编辑:正如BoBTFish所指出的:如果它是在堆栈上分配的,\u freea什么都不做,那么这个答案是不正确的,因为之前释放了内存。但是,我认为最好不要删除它,因为它指向了一个比\u alloca更安全的替代方法。不,没有(不包括显式地弄乱堆栈,例如在asm块中),但如果您需要这样的东西,您可以使用and 编辑:正如

我知道alloca的行为是在离开函数时释放堆栈中的内存。有没有一种方法可以更早地释放内存?

没有(不包括显式地弄乱堆栈,例如在
asm
块中),但是如果您需要这样的东西,您可以使用and

编辑:正如BoBTFish所指出的:
如果它是在堆栈上分配的,\u freea什么都不做
,那么这个答案是不正确的,因为之前释放了内存。但是,我认为最好不要删除它,因为它指向了一个比
\u alloca
更安全的替代方法。

不,没有(不包括显式地弄乱堆栈,例如在
asm
块中),但如果您需要这样的东西,您可以使用and


编辑:正如BoBTFish所指出的:
如果它是在堆栈上分配的,\u freea什么都不做
,那么这个答案是不正确的,因为之前释放了内存。但是,我认为最好不要删除它,因为它指出了一种比alloca更安全的替代方法。

不。无论如何,使用alloca没有任何意义-您可以编写一个高速池内存分配器,它可以更快地从堆中分配和取消分配内存,并且具有更小的大小限制。

不。无论如何,使用
\u alloca
是没有意义的-您可以编写一个高速池内存分配器,它可以更快地从堆中分配和释放内存,并且具有更小的大小限制。

@Mystical:
\u alloca
受堆栈大小的限制-通常不超过一兆字节。尽管这是不明智的,但我很容易理解重用如此稀缺商品的愿望。不,而且,不要使用
\u alloca
。如果您的编译器支持VLAs(来自C99)作为扩展,然后块范围的VLA将在块退出时释放,而不是在函数退出时释放。@Mysticial:
\u alloca
受堆栈大小的限制-通常不超过一兆字节。尽管这是不明智的,但我很容易理解重用如此稀缺商品的愿望。不,而且,不要使用
\u alloca
。如果编译器支持VLA(来自C99)作为扩展,那么块范围的VLA将在块退出时释放,而不是在函数退出时释放。\u freea函数释放内存块(memblock)之前通过调用_malloca分配的内存。_freea检查内存是在堆上还是堆栈上分配的。如果内存是在堆栈上分配的,_freea不执行任何操作。_freea函数解除分配内存块(memblock)之前是通过调用_malloca分配的。_freea检查内存是在堆上还是堆栈上分配的。如果内存是在堆栈上分配的,则\u freea不执行任何操作。