- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!