c++ - 我应该将所有对 new/delete 的调用集中到一个类中吗?

标签 c++ memory-management stl

目前,我让我所有的对象管理它们自己的内存,通常在它们的构造函数中使用 new 分配,并在它们的析构函数中使用 delete。这目前有效,但我拥有的使用任意内存量的类的数量正在增加。 new 本质上是一个“请求”这一事实也让我感到困扰,因为这些对象中没有代码来处理被告知“不”的情况,如果我不想依赖异常处理不需要。

  • 在性能方面是否有利于完全 将分配内存的所有调用屏蔽到处理的单个类 堆上的每个内存分配,可能分配大块 一次并使用 placement new 处理引用?

  • 在较小的类中使用内存分配是否足以引起人们的关注?

  • 我还能使用 STL 容器并强制它们使用堆吗? 提供?

提前致谢!

最佳答案

Can I still use STL containers and force them to use the heap I provide?

STL 容器接受自定义分配器:

http://en.wikipedia.org/wiki/Allocator_(C%2B%2B)#Custom_allocators

这是一个带有示例链接的线程:

Compelling examples of custom C++ allocators?

Is it beneficial in terms of performance ... ?

您只能通过编写应用程序、提出一组可重现的测试场景并在分析器中运行您的代码来找出答案。如果您发现内存分配占运行时间的很大一部分,那么您可能会受益于更好的分配策略。

如果您可以将您的程序分解为一个功能级别,并且可以为每种情况提出现实的场景,那么您不必让整个程序都为此工作。但请记住,花在优化上的时间本可以花在测试或编写新功能上:) 只做必要的事,不要再做...

Is the use of memory allocation in smaller classes a big enough concern to even bother with this?

这取决于您的程序、您对大分配障碍的敏感程度、您在循环中分配的频率等,这是可能的。简介:)

在开发您的应用时,您仍然可以对分配敏感 - 尽可能创建自动存储(堆栈本地)变量,并仅在必须时动态分配。

关于c++ - 我应该将所有对 new/delete 的调用集中到一个类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458696/

相关文章:

c++ - 在应用程序中编写控制台

c++ - 为什么 SetupDiGetDeviceProperty 函数不起作用?

内存管理

swift - 找出内存泄漏

c++ - lambda 是否像 C++ 中的函数一样内联?

c++ - GDIPlus::位图亮化图像 C++

c++ - clang++ 总是生成空的 profraw 覆盖率报告

c++ - 是否有可能获得由 'new' 分配的内存块大小?

c++ - 使用 std::transform 打印 Map<string, vector<string*>> 时出错

c++ - 我需要可复制的缓冲区,尽可能轻(例如不是零初始化)?