Phi*_*sse 8 windows stack memory-management
我正在使用DevStudio在Windows上开发,在C/C++中不受管理.
我想在堆栈而不是堆上分配一些内存,因为我不想处理手动释放内存(我知道智能指针和所有这些东西.我有一个非常具体的内存分配我需要的情况处理),类似于使用A2W()和W2A()宏.
_alloca就是这样做的,但它已弃用了.建议使用malloca代替.但_malloca文档说,每次调用_malloca都必须调用___freea.然后它失败了我使用_malloca的目的,我将使用malloc或new.
任何人都知道我是否可以逃避不泄漏_freea而内部的影响是什么?
否则,我最终只会使用已弃用的_alloca函数.
Ree*_*sey 14
每次调用_malloca后调用_freea都很重要.
_malloca就像_alloca,但为您的保护添加了一些额外的安全检查和增强功能.因此,_malloca可以在堆上而不是堆栈上进行分配.如果发生这种情况,并且您没有调用_freea,则会出现内存泄漏.
在调试模式下,_malloca总是在堆上分配,因此也应该被释放.
搜索_ALLOCA_S_THRESHOLD以获取有关阈值如何工作的详细信息,以及为什么_malloca存在而不是_alloca,这应该是有意义的.
编辑:
有评论表明这个人只是在堆上分配,并使用智能指针等.
堆叠分配有很多优点,_malloca将为您提供,因此有理由希望这样做._alloca将以相同的方式工作,但更有可能导致堆栈溢出或其他问题,并且遗憾的是不提供好的异常,而是倾向于拆除您的进程._malloca在这方面更加安全,并且可以保护你,但是成本是你仍然需要用_freea释放你的记忆,因为_malloca会选择在堆而不是堆栈上分配,因为它可能(但在发布模式下不太可能).
如果你唯一的目标是避免释放内存,我建议使用一个智能指针,当你的成员超出范围时,它将为你释放内存.这将在堆上分配内存,但是安全,并防止您必须释放内存.这只适用于C++,如果你使用普通的'C',这种方法是行不通的.
如果你因为其他原因(通常是性能,因为堆栈分配非常非常快)而尝试在堆栈上进行分配,我建议使用_malloca并且生活在你需要为你的值调用_freea的事实上.