看板 C_and_CPP 關於我們 聯絡資訊
在 32bit 環境下,邏輯記憶體只有 4G,要用完是有可能的 但 64bit 環境下,邏輯記憶體應該用不完吧? 那這樣還有必要處理 new 失敗的情形嗎? 計概學的很爛,有錯請指正,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.116.32 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1486736660.A.F9E.html
nick5130: 你現在上網電腦的記憶體有無限大嗎? 02/10 22:34
nick5130: 如果是的話,就不用考慮new失敗 02/10 22:34
nick5130: 如果不是的話,你怎麼會覺得不需要考慮new失敗? 02/10 22:35
nick5130: new會不會失敗跟作業系統無關,跟你的電腦記憶體有多少 02/10 22:37
nick5130: 有關 02/10 22:37
nick5130: 有錯請指正 02/10 22:37
os653: 我以為邏輯記憶體沒爆的話,記憶體不夠會拿硬碟當記憶體用 02/10 22:45
MOONRAKER: 沒事不會讓你用到完的啦 02/10 22:48
LiloHuang: C++ constructor 是可以主動丟 exception 的 02/10 23:34
shadow0326: 你可以試試看用到開始swap硬碟當記憶體 程式效能如何 02/10 23:36
LiloHuang: new 失敗未必是記憶體不足,還是得處理其它的錯誤。 02/10 23:37
CodingMan: 拿硬碟是虛擬記憶體的設定,也不是無限大啊 02/11 00:41
Caesar08: 那你硬碟也爆了要怎麼辦? 02/11 00:43
laladeer: 用硬碟當記憶體是一個悲劇的開始 02/11 00:55
EdisonX: x64 os還是要處理,就算你覺得mem用不完,那也是你現在 02/11 04:35
EdisonX: 的情況,有些starter os支援有memory 根本不到16g,就算 02/11 04:35
EdisonX: 有好了,實際插16g,這個大小在很多領域都很容易爆,像是 02/11 04:35
EdisonX: 影像處理。 02/11 04:35
os653: 用到硬碟爆掉,那也沒辦法處理了,直接crash也是可接受的事 02/11 09:29
os653: 何況我用到爆記憶體開始用硬碟的時候,那龜速根本無法忍耐 02/11 09:30
os653: 倒是使用的library有可能因為別的因素new失敗這點沒考慮到 02/11 09:33
CodingMan: 反正判斷一下就不會出錯,你沒判斷出錯了怎麼辦?沒有 02/11 10:05
CodingMan: 東西是無限的 02/11 10:05
boss0405: 同意樓上,也養成好習慣,沒養成好習慣,要是寫embedded 02/11 10:26
boss0405: system的code會很慘 02/11 10:26
ronin728: 我的筆電就沒有開虛擬磁碟,因為太消耗,瀏覽器分頁開太 02/11 15:22
ronin728: 多就滿出來了 02/11 15:22
EdisonX: mem不夠crash沒關系?試想一下早期word裡,用到一半crash 02/12 00:48
EdisonX: 有誰可接受。 02/12 00:48
Vdragon: 先確定當前運作的 process 的資料分頁能被系統 swap 到硬 02/12 09:57
Vdragon: 碟再說吧 02/12 09:57
CodingMan: 怎麼聽起來判斷一下會要你的命一樣XDDD 02/12 13:32
os653: 寫判斷code會多很多,而且也不知道到底怎麼寫比較正確 02/12 15:47
os653: 到真的爆記憶體的時候,還能夠開檔案寫入錯誤訊息嗎? 02/12 15:49
ronin728: IO與記憶體管理有滿天 assert , catch 是很正常的 02/14 10:42
Killercat: 你要確認你的東西不會被ulimit卡... 並不是所有linux 02/14 11:54
Killercat: app都可以用無限資源去跑的 02/14 11:54
TobyH4cker: 之前筆電只有8GB開Chrome也是crash 02/14 18:30
ruthertw: 看ㄧ下8086架構的定址方法 02/14 21:53
brandyjohn: 好奇要怎麼對記憶體不夠作錯誤處理?有大大可以分享嗎? 02/15 23:45
Killercat: More Effective C++, Item 8 02/16 12:53
Killercat: 真的要提怎麼針對記憶體new不出來可以寫成一整本書了 02/16 12:54
Killercat: 有handler處理(C/C++) 有try-catch bad-alloc(C++) 02/16 12:55
Killercat: 也有自己做memory management(STL) 02/16 12:55
Killercat: 不過以C++來講 比較通用的方法是抓bad-alloc 02/16 12:55
Killercat: 自己做子系統的話 通常是placement new/delete 02/16 12:56
Killercat: C場合似乎唯一的解法就是handler了 02/16 12:57