您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Linux乐观的malloc:当内存不足时,new总是会抛出吗?

Linux乐观的malloc:当内存不足时,new总是会抛出吗?

这取决于; 您可以使用vm.overcommit_memory配置内核的过量使用设置。

赫伯·萨特(Herb Sutter)几年前讨论了这种行为实际上是如何不符合C ++标准的

“在某些操作系统上,尤其是Linux,内存分配总是会成功。停止。即使在请求的内存确实不可用的情况下,分配也总是能够成功吗?原因是分配本身仅记录了对内存的请求;内存分配只是记录了对内存的请求。因此,在实际使用内存之前,(物理或虚拟)内存不会真正通过实际的后备存储提交给请求过程。

“请注意,如果new直接使用操作系统的功能,那么new总是会成功,但是以后任何无辜的代码(例如buf [100] =’c’;都可能抛出,失败或停止。从标准C 的角度来看,这两种 效果都一样)是不符合标准的,因为C 标准要求如果new无法提交足够的内存,它必须失败(这不会失败),并且buf [100] =’c’之类的代码不应引发异常或否则失败(这威力)。”

其他 2022/1/1 18:17:31 有567人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶