目前,我让我所有的对象管理它们自己的内存,通常在它们的构造函数中使用 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/