看板 C_and_CPP 關於我們 聯絡資訊
最近遇到一個問題 有一很大筆的資料要讀進來 (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
chchwy:vector.resize()可以手動指定空間,不會浪費 12/02 01:31
tropical72:1G 個整數.. 先確定你的os/memory 有到 4GB.. 12/02 01:35
ibmibmibm:deque 12/02 03:52
x000032001:簡單吧 4G才五百塊 現在應該都插到滿8G 16G了XD 12/02 08:30
x000032001:8G也不遠...換64bit後記憶體空間應該不是阻礙 12/02 08:30
Arton0306:deque的實作幾乎是我要的東西 不過看到下面這一篇 12/02 11:10
Arton0306:http://tinyurl.com/7jzg5sj 12/02 11:10
Arton0306:不知道它為什麼不會馬上釋放掉記憶體 12/02 11:10
Arton0306:照理來說一個區塊是空的就可以釋放掉了 12/02 11:11
Arton0306:回一樓 我還要remove時 記體體保證不會浪費太多 12/02 11:12
Arton0306:回2樓 我的記憶體是夠的 但不能浪費 12/02 11:13
shadow0326:因為realloc的effort很大 (alloc, total copy, 解構) 12/02 11:25
shadow0326:所以STL寧可預留也不想realloc 12/02 11:25
shadow0326:如果不想浪費的話可以用swap去釋放掉記憶體 12/02 11:26
littleshan:別說是STL,就算是底層的 free()/delete 12/02 12:07
littleshan:也不會在你呼叫的當下馬上把記憶體歸還給OS 12/02 12:07
littleshan:你的要求只能自行呼叫system call來解決 12/02 12:08
littleshan:用了之後你就會比較了解為啥記憶體配置會這樣做 12/02 12:11
Arton0306:感謝!那我實作的版本也會有一樣的問題了... 12/02 12:20