如果我重载全局new运算符使用内存池来分配内存,这个重载的'new'会影响STL内存分配吗?

问题描述 投票:0回答:1

目前我公司的一个项目,全局new/delete超载了。

我测试了一些短代码,并重载了全局运算符 new。我看到当我使用STL(如向量等)时会调用重载的new,所以我想知道“new”会抑制stl分配器并且会出现效率下降吗?

c++ memory stl allocator
1个回答
0
投票

所有分配器感知容器都使用

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 分配器感知容器的分配器。

© www.soinside.com 2019 - 2024. All rights reserved.