有没有办法获取两块堆分配的内存,并将它们有效地放在一起?这会比以下更有效吗?
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 ] );
答案 0 :(得分:2)
为了逐字节复制存储器,memcpy
不会出错。这将成为移动记忆的最快方式。
但请注意,有几点需要注意。首先,您必须手动确保目标内存足够大。您必须手动计算对象的大小(使用sizeof
运算符)。它不能很好地处理一些对象(shared_ptr
会浮现在脑海中)。在一些优雅的C ++ 11中,它看起来非常粗糙。
你的方式也有效,应该快得多。
您应该强烈考虑C ++的copy
算法(或其中一个兄弟姐妹),并使用vector
来动态调整大小。你可以使用更好的迭代器。同样,它应该几乎与memcpy一样快,还有一个额外的好处,它比移动字节更安全得多:shared_ptr
并且它的同类产品将按预期工作。
答案 1 :(得分:1)
我做了这样的事情,直到证明变慢:
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中的数据,可能比为每个数据调用函数一样快或甚至更快。