gpt4 book ai didi

c++ - 如果抛出异常,alloca() 是否返回内存?

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:13 24 4
gpt4 key购买 nike

我正在维护一个遗留的 C++ 应用程序,它似乎有一个缓慢的内存泄漏。我已经设法通过确保当前配置不再抛出任何异常来“修复”内存泄漏,并且我还可以触发泄漏并通过将其配置为导致许多异常来扩展它。

所有分配的内存都是使用 alloca() 而不是 malloc() 完成的。我得到的解释是,这是因为 alloca() 像 java 垃圾收集器一样工作,并在退出上下文时自动释放内存。

由于泄漏与抛出的异常非常明确,我认为 alloca() 在抛出异常时无法释放内存。

这完全合理吗?如果属实,我觉得它是 alloca() 的一个主要缺陷,但是当我用谷歌搜索 alloca() 时,它似乎通常是一个问题。

我很感激任何专家的见解。

最佳答案

问题很可能是由于间接级别造成的。

字面上的问题是“如果抛出异常,alloca 是否返回内存?”。答案是;它返回直接分配的内存。没有析构函数运行,alloca 分配的内存中的任何拥有指针都被泄漏。

关于c++ - 如果抛出异常,alloca() 是否返回内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53777376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com