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