[問題] 內含array的link list

看板C_and_CPP作者 (Ar藤)時間13年前 (2011/12/01 17:19), 編輯推噓5(5014)
留言19則, 7人參與, 最新討論串1/2 (看更多)
最近遇到一個問題 有一很大筆的資料要讀進來 (1G個整數) 如果用vector由於它會2倍2倍成長 有些空間會被浪費掉 如果用link list 每個node會有個pointer也造成浪費 所以我想可以在link list裡面放個buffer 每個buffer可存多個元素 這樣pointer造成的浪費就比較少 不知道這樣的結構是否有什麼特別的名稱? C++有提供類似的庫以供使用嗎? 順便附上我寫的程式碼 不過還有一些error沒清完 http://ideone.com/9FfGJ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.140.149

12/02 01:31, , 1F
vector.resize()可以手動指定空間,不會浪費
12/02 01:31, 1F

12/02 01:35, , 2F
1G 個整數.. 先確定你的os/memory 有到 4GB..
12/02 01:35, 2F

12/02 03:52, , 3F
deque
12/02 03:52, 3F

12/02 08:30, , 4F
簡單吧 4G才五百塊 現在應該都插到滿8G 16G了XD
12/02 08:30, 4F

12/02 08:30, , 5F
8G也不遠...換64bit後記憶體空間應該不是阻礙
12/02 08:30, 5F

12/02 11:10, , 6F
deque的實作幾乎是我要的東西 不過看到下面這一篇
12/02 11:10, 6F

12/02 11:10, , 7F

12/02 11:10, , 8F
不知道它為什麼不會馬上釋放掉記憶體
12/02 11:10, 8F

12/02 11:11, , 9F
照理來說一個區塊是空的就可以釋放掉了
12/02 11:11, 9F

12/02 11:12, , 10F
回一樓 我還要remove時 記體體保證不會浪費太多
12/02 11:12, 10F

12/02 11:13, , 11F
回2樓 我的記憶體是夠的 但不能浪費
12/02 11:13, 11F

12/02 11:25, , 12F
因為realloc的effort很大 (alloc, total copy, 解構)
12/02 11:25, 12F

12/02 11:25, , 13F
所以STL寧可預留也不想realloc
12/02 11:25, 13F

12/02 11:26, , 14F
如果不想浪費的話可以用swap去釋放掉記憶體
12/02 11:26, 14F

12/02 12:07, , 15F
別說是STL,就算是底層的 free()/delete
12/02 12:07, 15F

12/02 12:07, , 16F
也不會在你呼叫的當下馬上把記憶體歸還給OS
12/02 12:07, 16F

12/02 12:08, , 17F
你的要求只能自行呼叫system call來解決
12/02 12:08, 17F

12/02 12:11, , 18F
用了之後你就會比較了解為啥記憶體配置會這樣做
12/02 12:11, 18F

12/02 12:20, , 19F
感謝!那我實作的版本也會有一樣的問題了...
12/02 12:20, 19F
文章代碼(AID): #1ErxSYWJ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ErxSYWJ (C_and_CPP)