是否有一种方法可以将两块堆分配的内存有效地放在一起?这样会比下面的方法更有效吗?
for( unsigned int i = 0; i < LENGTH_0; ++i )
AddToArray( buffer, array0[ i ] );
for( unsigned int i = 0; i < LENGTH_1; ++i )
AddToArray( buffer, array1[ i ] );
对于逐个字节复制内存,使用memcpy
是不会出错的。这将是移动内存最快的方式。
sizeof
操作符)。它不会很好地工作与一些对象(shared_ptr
想到)。在一些优雅的c++ 11中,它看起来相当恶心。
你的方法也可以,应该差不多一样快。
您应该强烈考虑c++的copy
算法(或它的一个同类算法),并使用vector
s动态调整大小。你可以使用迭代器,这要好得多。同样,它应该几乎和memcpy一样快,还有一个额外的好处,那就是它比移动字节安全得多:shared_ptr
和它的同类将像预期的那样工作。
我会这样做,直到被证明是缓慢的:
vector<decltype(*array0)> vec;
vec.reserve(LENGTH_0 + LENGTH_1);
vec.insert(vec.end(),array0,array0 + LENGTH_0);
vec.insert(vec.end(),array1,array1 + LENGTH_1);
取决于存储在array1和array0中的数据,这可能与对每个数据调用一个函数一样快,甚至更快。