gpt4 book ai didi

windows - 调用_freea 真的有必要吗?

转载 作者:可可西里 更新时间:2023-11-01 12:44:49 25 4
gpt4 key购买 nike

我正在使用 DevStudio 在 Windows 上进行非托管 C/C++ 开发。

我想在堆栈而不是堆上分配一些内存,因为我不想手动释放内存(我知道智能指针和所有这些东西。我有一个非常具体的内存案例我需要处理的分配),类似于 A2W() 和 W2A() 宏的使用。

_alloca 这样做,但已弃用。建议改用malloca。但是 _malloca 文档说每次调用 _malloca 时都必须调用 ___freea。这违背了我使用 _malloca 的目的,我将改用 malloc 或 new。

有人知道我是否可以在不泄漏的情况下不调用 _freea 以及内部影响是什么?

否则,我最终只会使用已弃用的 _alloca 函数。

最佳答案

在每次调用 _malloca 之后调用 _freea 总是很重要的。

_malloca 类似于 _alloca,但添加了一些额外的安全检查和增强功能来保护您。因此,_malloca 可以在堆上而不是堆栈上进行分配。如果发生这种情况,并且您不调用 _freea,就会发生内存泄漏。

在 Debug模式下,_malloca 总是在堆上分配,所以也应该被释放。

搜索 _ALLOCA_S_THRESHOLD 以了解有关阈值如何工作的详细信息,以及为什么存在 _malloca 而不是 _alloca,这应该是有意义的。


编辑:

有评论说人家只​​是在堆上分配,用智能指针等。

堆栈分配有很多优点,_malloca 将为您提供,因此有理由想要这样做。 _alloca 将以相同的方式工作,但更有可能导致堆栈溢出或其他问题,不幸的是,它不提供很好的异常,而往往只是破坏你的进程。 _malloca 在这方面要安全得多,并且可以保护您,但代价是您仍然需要使用 _freea 释放内存,因为 _malloca 有可能(但在 Release模式下不太可能)选择在堆上而不是堆栈上分配。

如果您的唯一目标是避免必须释放内存,我会建议使用一个智能指针,它会在成员超出范围时为您处理内存释放。这会在堆上分配内存,但为了安全起见,并且可以防止您释放内存。不过,这仅适用于 C++ - 如果您使用的是普通的 C,则此方法无效。

如果您出于其他原因尝试在堆栈上进行分配(通常是性能,因为堆栈分配非常非常快),我建议您使用 _malloca 并接受这样一个事实,即您需要根据您的值调用 _freea .

关于windows - 调用_freea 真的有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734854/

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