c++ 如果我重载全局new操作符来使用内存池分配内存,这个重载的“new”会影响STL内存分配吗?

r1zk6ea1  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(116)

目前我公司的一个项目重载了全局新建/删除。
我测试了一些简短的代码,并重载了全局操作符new。当我使用STL时,我看到重载的new被调用(比如vector等),所以我想知道“new”是否会抑制STL分配器,是否会有一个效率优化?

z31licg0

z31licg01#

所有分配器感知的容器都使用allocator_type的示例进行动态内存管理。实际上,他们通过std::allocator_traits接口间接使用它,但这与解释无关。这意味着全局operator new/operator delete的重载不会直接影响STL容器,但会影响std::allocator,因为它使用全局operator new实现allocate()allocate_at_least()成员函数,并使用全局operator delete实现deallocate()成员函数。由于STL分配器感知容器使用std::allocator作为默认分配器,因此通过传递属性,全局operator new/operator delete的重载福尔斯在STL容器上。
如果你想避免这种情况,你只需要实现一个自定义的分配器,并始终使用它作为STL分配器感知容器的分配器。

相关问题