作者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/cn.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