【问题标题】:c++ releasing "_alloca" ted memory from stackc ++从堆栈中释放“_alloca” ted内存
【发布时间】:2012-09-17 22:05:53
【问题描述】:

我知道 _alloca 的行为是在您离开函数时从堆栈中释放内存。有没有办法提前释放内存?

【问题讨论】:

  • @Mysticial:_alloca 受堆栈大小的限制——通常不超过一兆字节。虽然不明智,但我很容易理解重复使用这种稀缺商品的愿望。
  • 不,还有,不要使用_alloca
  • 如果您的编译器支持 VLA(来自 C99)作为扩展,则块范围的 VLA 将在块退出时释放,而不是在函数退出时释放。

标签: c++ alloca


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    编辑:正如 BoBTFish 所指出的:If it was allocated on the stack, _freea does nothing 所以这个答案是不正确的 wrt 提前释放内存。但是,我认为最好不要删除它,因为它指向了 _alloca 的替代方案,它更安全。

    【讨论】:

    • _freea 函数会释放先前通过调用 _malloca 分配的内存块 (memblock)。 _freea 检查内存是分配在堆上还是栈上。 如果它是在堆栈上分配的,_freea 什么也不做。
    猜你喜欢
    • 2018-11-29
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2018-04-03
    • 1970-01-01
    • 2011-07-25
    • 2011-05-23
    相关资源
    最近更新 更多