我正在开发具有高性能和内存需求的应用程序。我的意思是 80 个内核和 500 GB 的 RAM。为了节省一些内存,我使用我自己的动态数组(16 B 开销)而不是std::vector
(24 B 开销),如果你有数十亿个,这很重要。我的问题与扩展该数组有关,如下所示:
//private
template <class ArrType>
void DynamicArray<ArrType>::reallocate(unsigned newCapacity) {
if (newCapacity < _size) return;
if (capacity == newCapacity) return;
ArrType * newArray = new ArrType[newCapacity];
capacity = newCapacity;
//for (unsigned i = 0; i < _size; i++) {
// newArray[i] = array[i];
//}
memcpy(newArray, array, _size * sizeof(ArrType));
if(array) delete [] array;
array = newArray;
}
如您所见,非常标准的重新分配,但我测试过memcpy
,它比使用for
循环快 10 倍。问题是当我调用 时delete
,它会调用 的对象的析构函数,这在有自己的动态分配ArrType
时是个问题。ArrType
复制newArray
将使用已删除的内存。有什么方法可以在不调用析构函数的情况下删除旧数组?