C++ 速度比較(2) 参照渡し vs 値渡し vectorにおける比較
Sponsored Links
皆さんこんにちわ。
お元気ですか。あの、雪きつすぎて外に出る気がおきません。
今日中に書こうと思ったら思ったよりも時間がかかって翌日になっていたとさ。
さて、本日はC++の速度比較
値渡しvs参照渡し。
vectorは値渡しと参照渡しどちらもできるのですが、なんか値渡しをすると速度が遅くなるとかなんとか。
さて実験。
実験環境は相変わらずです。
実験
実験内容
N=1000000回Functionを実行した。
その上でsizeを10000,100000の2つ比較する。
実験環境
OS:X 10.9.1
CPU:2.8GHz IntelCore i7
メモリ:16GB 1600MHz DDR3
結果
実験内容 | サイズ | 速度 |
値渡し | 10000 | 90.82 |
値渡し | 100000 | 808.82 |
参照渡し | 10000 | 0.002978 |
参照渡し | 100000 | 0.004653 |
感想
値渡しが信じられないぐらい遅い…。こんなに遅かったのか。
サイズにも関わってくるのね。うかつに値渡しはできないね…これだと。
ソースコード
#include <iostream> #include <vector> using namespace std; int N = 1000000; void argument(vector<int> array){ int a = 10; } void pointer_argument(vector<int> &array){ int b = 10; } int main(void){ int size = 1000000; vector<int> array(size); for(int i = 0; i < size; i++){ array[i] = i; } clock_t start,end; start = clock(); for(int i = 0; i < N; i++){ argument(array); } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; start = clock(); for(int i = 0; i < N; i++){ pointer_argument(array); } end = clock(); cout << (double)(end-start)/CLOCKS_PER_SEC << endl; }