Re: [問題] 是否有方法加快vector resize的速度
※ 引述《xtxml (赤木巧☠)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC.NET 2008
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: long t1111 = clock();
: vector<unsigned char> vecccc(2048*2048*4); //(1)
: long t2222 = clock();
: unsigned char* arrrr = new unsigned char[2048*2048*4];
: long t3333 = clock();
: long dt01 = t2222 - t1111;
: long dt02 = t3333 - t2222;
: printf("\n %d : %d\n",dt01,dt02);
: delete[] arrrr;
: debug: 40ms(vec) : 4ms(arr)
: release: 11ms(vec) : 0ms(arr)
: 註:(1)的部分換成resize一樣很慢。
你的目的是配置出空間後使用 memcpy 賦值
而這樣的比較是不公平的
因為 vector 多做了 default initialize 這件事
正確的比較方法是這樣的:
long size = 2048*2048*4;
unsigned char* source = ... // data source
// array
clock_t t1 = clock();
unsigned char* array = new unsigned char[size];
memcpy(array, source, size); // or std::copy
clock_t array_time = clock() - t1;
// vector
clock_t t2 = clock();
vector<unsigned char> vec;
vec.assign(source, source+size);
clock_t vector_time = clock() - t2;
cout << "array: " << array_time << endl;
cout << "vector: " << vector_time << endl;
這邊要注意兩個地方:
1. 對 vector 內容賦值不要用 memcpy 而是用 assign
assign 會檢查大小,不夠的時候會自動增長
2. 因為 assign 會自動增長,所以建立 vector 時就不需要指定 size
這麼一來也節省了 default initialize 的時間
上面的 code 我使用 VC++ 2010 執行
不管是否開 debug 兩邊的速度都是相同的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.39.238.242
※ 編輯: littleshan 來自: 202.39.238.242 (07/22 22:47)
推
07/23 00:07, , 1F
07/23 00:07, 1F
推
07/23 00:55, , 2F
07/23 00:55, 2F
推
07/23 09:13, , 3F
07/23 09:13, 3F
推
07/23 10:54, , 4F
07/23 10:54, 4F
推
07/23 11:07, , 5F
07/23 11:07, 5F
→
07/23 11:09, , 6F
07/23 11:09, 6F
→
07/23 11:09, , 7F
07/23 11:09, 7F
→
07/23 12:34, , 8F
07/23 12:34, 8F
推
07/23 13:41, , 9F
07/23 13:41, 9F
→
07/23 13:42, , 10F
07/23 13:42, 10F
→
07/23 13:42, , 11F
07/23 13:42, 11F
→
07/23 13:43, , 12F
07/23 13:43, 12F
→
07/23 14:36, , 13F
07/23 14:36, 13F
推
07/25 00:02, , 14F
07/25 00:02, 14F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):