[討論] VC2010 V.S Linux (STL vector)

看板C_and_CPP作者 (@O@)時間13年前 (2011/06/26 17:58), 編輯推噓3(3014)
留言17則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2010 && Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include <vector> 問題(Question): VC 2010 的vector 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> #include <vector> #include <time.h> #include <stdlib.h> #define SIZE 10000000 float array[SIZE]; using namespace std; int main(){ int i; srand(time(NULL)); time_t s,e; s = time(NULL); int l; vector<float> array; for(i=0;i<SIZE;i++){ array[i] = ((float)(rand()%10000)/(float)10000); array.push_back(((float)(rand()%10000)/(float)10000)); } e = time(NULL); cout <<"time passed is : "<<e - s << endl; return 0; } ------- 我先在Linux 平台上分別跑了兩次這隻程式(一支跑綠色code 一隻跑紅色code) 結果沒有意外的 時間都差不多是一秒左右 然後再VC2010 跑一模一樣的程式 結果直接用array 的紅色程式也是跑了差不多一秒 但是用STL的vector 竟然跑了三~四秒.... 明明tutorial 上面寫vector.push 也是 amortized const time 結果在VC 上面跑 竟然慢到三倍... 這個結果讓我覺得很無言 微軟是對STL 做了甚麼奇怪的事情嗎 = = 好離譜0.0 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.244.131

06/26 18:06, , 1F
debug build?
06/26 18:06, 1F

06/26 18:46, , 2F
vector.push要一直new記憶體和搬來搬去 會慢很正常
06/26 18:46, 2F

06/26 18:49, , 3F
vector<float> array(SIZE);
06/26 18:49, 3F

06/26 18:49, , 4F
已知size的話可以這樣寫 避免連續push
06/26 18:49, 4F

06/26 20:54, , 5F
改成用 release 模式編重跑看看吧
06/26 20:54, 5F

06/26 21:36, , 6F
怎麼會這樣測 這樣是測mem alloc的速度...
06/26 21:36, 6F

06/26 21:47, , 7F
你gcc有下-O3嗎? 如果有,vs要用release版去測.還有上面
06/26 21:47, 7F

06/26 21:48, , 8F
比較快,因為下面的方法超過一定長度,是要先擴增空間的
06/26 21:48, 8F

06/26 21:49, , 9F
再者linux給空間比較大方,= =真的好多速度魔人
06/26 21:49, 9F

06/26 21:54, , 10F
... 因為 M$ 之類為了 C++ 的新手在 STL 動了手腳
06/26 21:54, 10F

06/26 21:55, , 11F
請查 SECURE_SCL 謝謝 ...
06/26 21:55, 11F

06/26 21:56, , 12F
這是一個特別的東西 當 vector 只有 2 而已 用 [2] 下去
06/26 21:56, 12F

06/26 21:57, , 13F
理論上是不會當的 然後 M$ 特別加強這部分 所以會當
06/26 21:57, 13F

06/26 21:58, , 14F
所以這要說誰比較正確 比較好心 呢? 看看吧 XD
06/26 21:58, 14F

06/27 16:32, , 15F
vs開 O2,Ot 後,很難會比它快耶.應該還不致於大勝地步吧
06/27 16:32, 15F

06/27 22:56, , 16F
的確是debug mode 的關係 debug 跟release 速度差超級多...
06/27 22:56, 16F

06/27 22:56, , 17F
耍笨了~@@
06/27 22:56, 17F
文章代碼(AID): #1E1mAhy0 (C_and_CPP)