Re: [問題] 不傾向使用std::vector的原因

看板C_and_CPP作者 (Ar藤)時間11年前 (2012/11/04 22:26), 編輯推噓4(4015)
留言19則, 6人參與, 最新討論串5/5 (看更多)
※ 引述《QHsin (Q馨)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Linux VC++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : C++ Standard Library(C++標準程式庫) : C++ Standard Template Library (STL) : 問題(Question): : 這應該算是剛入行沒多久的菜鳥問題。 : 主要是工作到現在,常常看到一些class寧可自行管理動態陣列, : 而不喜歡直接使用vector,其中的原因自己研究不太出來, : 所以想問問是不是有一些業界的相關經驗,導致有什麼不適合使用vector的狀況發生。 之前的工作有遇過一個不用vector會比較好的情況 這個情況就是: 一、我們在run time才知道有多少元素 二、我們需要節省記憶體 三、這個container中的元素數決定後就固定不變,所以不用push_back...等的 我們在amd64的環境中。vector它為了動態增減元素,內部有三個指 標,分別指出開頭、現在元素量、容量結尾,這會佔用24bytes 而我們只需要開頭和元素量,一個pointer和一個int,只用了12bytes 這樣的container我們會create 10^9個以上,一來一往就差了好幾GB了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.55.97 ※ 編輯: Arton0306 來自: 114.42.55.97 (11/04 22:26)

11/04 22:38, , 1F
run time 可以用 reverse
11/04 22:38, 1F

11/04 22:57, , 2F
例如說函數的某參數 我就是要它只能是4個元素的array
11/04 22:57, 2F

11/04 22:58, , 3F
這樣應該可以省去檢查個數的麻煩..
11/04 22:58, 3F

11/04 23:22, , 4F
(阿對.. 忘了這是要推的= =
11/04 23:22, 4F

11/05 01:11, , 5F
這篇理由是不錯,只是我好奇的是,真有情況需要用到 10^9 個
11/05 01:11, 5F

11/05 01:11, , 6F
vector ? 不就變成了 vector< vector<Type> > ?
11/05 01:11, 6F

11/05 01:12, , 7F
另外小弟不才認為倒是有種情況使用 vector 可能不會較佳.
11/05 01:12, 7F

11/05 01:13, , 8F
就是 vector< vector<Type> >,實體上並不保證完全連結,但
11/05 01:13, 8F

11/05 01:13, , 9F
用 malloc / new 出來的二維,用一點技巧可保證完全連續。
11/05 01:13, 9F

11/05 07:17, , 10F
有 EDA產業使用幾百G是很平常的
11/05 07:17, 10F

11/05 07:20, , 11F
工作的code 這些container是沒有連續的
11/05 07:20, 11F

11/05 07:21, , 12F
或者說 從我們algo的實作而言 就算連續也沒有太大的好處
11/05 07:21, 12F
※ 編輯: Arton0306 來自: 114.42.55.97 (11/05 07:25) ※ 編輯: Arton0306 來自: 114.42.55.97 (11/05 07:26)

11/05 11:22, , 13F
比較好奇的是當你都很平常的使用幾百 G 時你會在乎這幾 G
11/05 11:22, 13F

11/05 11:22, , 14F
的理由為?
11/05 11:22, 14F

11/05 11:42, , 15F
在那種特殊環境底下應該是連 STL 都盡量避免使用吧?
11/05 11:42, 15F

11/05 12:51, , 16F
@Arton~ : 或許我說清楚點,有些情況用二維,但需要完全連續
11/05 12:51, 16F

11/05 12:52, , 17F
增加cache-hit之類的,這時我可能不會考慮vector,當然不是
11/05 12:52, 17F

11/05 12:52, , 18F
指您的情況.
11/05 12:52, 18F

11/10 13:03, , 19F
回Ebergies 這樣的修改不是差幾G 而是差某個比例
11/10 13:03, 19F
文章代碼(AID): #1Gbdi5AR (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Gbdi5AR (C_and_CPP)