我编写了一个内存分配器来解决C ++(mingw)中默认速度的问题。
要做到这一点,我已经重载全局new和delete。我正在通过的所有请求都正确分配了正确大小的内存,但我仍然得到分段错误。这些错误似乎与矢量的使用有关。
我认为这些向量将被全局覆盖new和delete覆盖,但我可能错了。所以我要问的是我是否需要一个可以在我的内存分配器上工作的stl分配器,或者是否可能使用我忽略的全局new和delete的其他问题?
答案 0 :(得分:4)
我认为这些向量将被全局覆盖new和delete覆盖,但我可能错了。所以我要问的是我是否需要一个可以在我的内存分配器上工作的stl分配器,或者是否可能使用我忽略的全局new和delete的其他问题?
C ++标准(此处来自C ++ 11)讲述了std::allocator
(用于标准容器的默认分配器):
(§20.6.9/ 1)备注:存储是通过调用:: operator new(std :: size_t)(18.6.1)获得的,但是在调用此函数的时间或频率是不确定的。 [...]
因此,您没有实现与向量一起使用的特殊分配器类这一事实不是问题。问题可能是由于您对全局运算符本身的定义有误,或者可能是由于您使用向量的方式。建议的后续步骤是:
::operator new
未被替换答案 1 :(得分:0)
我认为需要实施STL Allocators来控制vector
的分配