我貼在ideone以下錐http://ideone.com/Hp9pL8下:數組memcpy比矢量stl :: copy on ideone快1000倍以上?
#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
constexpr size_t elems = 500000;
{
int array_source[elems];
int array_destination[elems];
iota(begin(array_source),end(array_source),0);
auto start = chrono::high_resolution_clock::now();
memcpy (array_destination, array_source, elems * sizeof(int));
auto stop = chrono::high_resolution_clock::now();
auto duration = stop - start;
auto nanoseconds = chrono::duration_cast<chrono::nanoseconds>(duration);
cout << "Duration of old style copy: " << nanoseconds.count() << " ns." << endl;
}
{
vector<int> vector_source(elems);
vector<int> vector_destination(elems);
iota(begin(vector_source),end(vector_source),0);
auto start = chrono::high_resolution_clock::now();
copy(begin(vector_source), end(vector_source), begin(vector_destination));
auto stop = chrono::high_resolution_clock::now();
auto duration = stop - start;
auto nanoseconds = chrono::duration_cast<chrono::nanoseconds>(duration);
cout << "Duration of stl style copy: " << nanoseconds.count() << " ns." << endl;
}
}
輸出是:
Duration of old style copy: 280 ns.
Duration of stl style copy: 931438 ns.
我預計這兩種方法產生近於優化的建立相同的指令。爲什麼複製矢量慢1000倍以上。 ideone沒有使用任何優化?
如果您想對'std :: copy'測量'memcpy',請在兩種情況下使用相同的數據類型。對於'memcpy'使用自動存儲陣列,對'std :: copy'使用'std :: vector',原因不明。 – juanchopanza 2014-09-05 07:20:26
在這兩種情況下,複製都可以被優化,因爲它不產生輸出 – 2014-09-05 07:22:03
當代碼字符串包含'ns.'時,爲什麼輸出以'ms.'結尾還不清楚' – 2014-09-05 07:23:38