[問題] 是否有方法加快vector resize的速度

看板C_and_CPP作者 (赤木巧☠)時間12年前 (2013/07/22 10:26), 編輯推噓1(1020)
留言21則, 6人參與, 最新討論串1/2 (看更多)
開發平台(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一樣很慢。 上網google跟爬文都沒有找到有效的解決方法。 想請問一下各為先進,有什麼小技巧可以解決這樣的效能差距嗎? 感覺都是動態配置記憶體,vector的效率卻差了十倍? 我的目的只是單純是想用vector的方式動態分配一個很大的陣列。 因為相關的函數都是用vector來傳值的,如果不行的話就要大改了。 想請問一下各位先進,有什麼技巧可以解決這樣的效能差距嗎? 以上,煩請指教。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.45.115 ※ 編輯: xtxml 來自: 220.133.45.115 (07/22 18:27)

07/22 18:35, , 1F
改用reserve看看?
07/22 18:35, 1F

07/22 18:36, , 2F
ctor和resize應該會一個一個初始化所有元素
07/22 18:36, 2F

07/22 18:37, , 3F
我有想過,但reserve之後,如何改變vector的size呢?
07/22 18:37, 3F

07/22 18:37, , 4F
所以比new []多了非常多個步驟
07/22 18:37, 4F

07/22 18:38, , 5F
reserve之後一樣resize或push_back啊
07/22 18:38, 5F

07/22 18:39, , 6F
普通的resize不會把buffer還回去,只有不夠會要更大的
07/22 18:39, 6F

07/22 18:39, , 7F
reserve之後resize我自己測是一樣慢,push_back則更慢
07/22 18:39, 7F

07/22 18:39, , 8F
似乎都會一個個去跑建構子
07/22 18:39, 8F

07/22 18:43, , 9F
你是之後要直接用memcpy之類的東西指定值嗎?
07/22 18:43, 9F

07/22 18:44, , 10F
是的,當然不管size也是可以copy,只是感覺不太好XD
07/22 18:44, 10F

07/22 18:46, , 11F
查了一下vector好像一定會initialize
07/22 18:46, 11F

07/22 18:46, , 12F
自己寫一個Array吧
07/22 18:46, 12F

07/22 18:47, , 13F
如果最後無法避免的話,只好改array了
07/22 18:47, 13F

07/22 20:55, , 14F
自己寫一個吧 速度慢算內部演算法的問題吧
07/22 20:55, 14F

07/22 21:16, , 15F
自己來啊! 事先先配置啊! dx
07/22 21:16, 15F

07/22 22:03, , 16F
回家又查了一下,看來無解,剛剛用陣列改好了,感謝大家:)
07/22 22:03, 16F

07/23 12:11, , 17F
veccccc這什麼名字啦…
07/23 12:11, 17F

07/23 12:21, , 18F
就,只是測試code亂取的,不要太在意:)
07/23 12:21, 18F

07/25 03:12, , 19F
必竟 vector<> 是屬於泛型類別樣板,它不像單純使用 new 配
07/25 03:12, 19F

07/28 01:19, , 20F
置記憶體而已...你可以看 vector<> 原始碼就知道它配置記憶
07/28 01:19, 20F

07/28 01:20, , 21F
體還做了那些事就能知道它的效率為何了.
07/28 01:20, 21F
文章代碼(AID): #1HxGZ7F6 (C_and_CPP)
文章代碼(AID): #1HxGZ7F6 (C_and_CPP)