我知道微软曾经建议使用HeapCreate()和HeapAlloc()来覆盖operator new,但那是一段时间以前的事了。更多细节请参见KB139638。
在Win32上,我是否仍然可以从覆盖new/delete中受益?推荐使用哪种实现方法?
谢谢您。
我知道微软曾经建议使用HeapCreate()和HeapAlloc()来覆盖operator new,但那是一段时间以前的事了。更多细节请参见KB139638。
在Win32上,我是否仍然可以从覆盖new/delete中受益?推荐使用哪种实现方法?
谢谢您。
这篇文章说你可以这样做,而不是说你应该这样做。代码写得很糟糕,不安全。一般来说,提供的new和delete实现对所有常规编程需求都能很好地工作。只有在确定重新实现它们可以解决特定问题时,才应考虑重新实现它们。
除非您正在进行非常耗费内存的程序(在这种情况下,在特定位置重载分配器将更为有效),否则重载new和delete运算符的主要好处是为了跟踪分配和释放以进行调试和分析。
对于大多数情况来说,重载全局new/delete
是一个不好的想法。
只有在必要时才应该使用类级别的内存管理(通过重载)。对您的应用程序进行分析,看看瓶颈是否在基于堆的分配/释放上。此外,如果您的类稍后可能会派生出其他类(因为new/delete
是static
成员,这会给实现者带来额外的负担),事情会变得更加复杂。
尝试传递一个分配器(具有策略,以便您可以测试哪个最适合您的需求),类似于STL所做的。
你有理由这样做吗?没有?那就不要这样做;你不会让自己的生活变得极其痛苦的机会很小。
你有一个应用程序,你已经对其进行了分析,并确定了某些内容的分配/释放是瓶颈吗?因为在你做到这一点之前,我不会担心它。
这对我来说似乎是过早的优化 :-)