作者rbufghj9713 (我只是來潛水)
看板C_and_CPP
標題[問題] 配置大量記憶體
時間Fri May 11 22:11:18 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc 5.4.0
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
如果今天我需要大量的記憶體做運算,使用new向系統索取空間要分段索取嗎?
如:
int *p=new int [40960];
變成(這邊的數字只是概念而已)
int *p1 = new int[20480];
int *p2 = new int[20480];
我擔心一次索取過大的記憶體會無法配置,請問各位都怎麼處理這種問題?
以上只是閒來無事突然想到,並非現在真的有遇到問題,還請各位不吝指教
*這邊是指大量計算所需要的記憶體,如有造成誤會在此說聲抱歉
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.63.209
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1526047881.A.CF9.html
1F:推 jerryh001: linked list05/11 22:53
謝謝回覆,這邊是指一個node裡面有很多空間嗎?有點像liked list + array這樣嗎?感
覺好像也是個不錯的解法
2F:→ Schottky: 等無法配置再來擔心吧,errror checking 記得要做05/11 22:57
3F:→ Schottky: 可以實際寫個程式來試試看啊05/11 23:00
了解,謝謝回覆,今天主要想問問看各位有沒有什麼要注意的細節(沒想到要做error che
cking(掩面)
※ 編輯: rbufghj9713 (111.249.63.209), 05/11/2018 23:08:23
4F:推 littleshan: 其實很多 memory allocator 的實作都是先向作業系統要05/12 00:46
5F:→ littleshan: 一大塊再慢慢分,所以如果你的總用量是確定的,05/12 00:47
因為我看有些實作也是這種方法,不過是擔心配置太多無法分出一塊完整記憶體
6F:→ littleshan: 一開始就直接配置好一大塊,效能會比較好05/12 00:48
7F:推 x000032001: 一次要一大塊 等到超過oom killer就會出來掃地了05/12 07:52
了解,又學到新東西,謝謝分享
※ 編輯: rbufghj9713 (111.249.63.209), 05/12/2018 15:39:32
8F:→ longlongint: 平常放檔案或資料庫 要算之前才讀出來
05/12 15:38
※ 編輯: rbufghj9713 (111.249.63.209), 05/12/2018 15:40:43
請問這種使用方式在CAD或是需要大量計算的程式上常見嗎?還是比較像是某些伺服器內
程式的寫法
※ 編輯: rbufghj9713 (111.249.63.209), 05/12/2018 15:42:11
9F:→ longlongint: 如果計算本身吃記憶體要拚速度 還是插記憶體吧 05/12 22:21
謝謝回覆,我加個條件以免大家誤會。
※ 編輯: rbufghj9713 (111.249.63.209), 05/13/2018 10:50:12
10F:推 littleshan: 我猜你的疑問是「系統剩餘的記憶體沒有連續怎麼辦」05/14 01:01
11F:→ littleshan: 實際上現代的 OS 都會用 paging 來解決這種問題 05/14 01:01
12F:→ littleshan: 所以一次直接要整塊就好,OS 會試圖把片段組起來給你 05/14 01:02
是的,因為敘述不清造成大家的困擾了,不過沒想到系統會自動做這塊,這次學到很多,
謝謝各位大大的回答
※ 編輯: rbufghj9713 (111.249.65.117), 05/14/2018 11:33:00
13F:推 nova06091: 不客氣 05/21 17:47