【问题标题】:Who handles C++ "new" memory allocation failure?谁处理 C++“新”内存分配失败?
【发布时间】:2015-05-29 12:03:26
【问题描述】:

在 C 语言中,人们经常在使用 malloc 后检查空指针。但是,在 C++ 中,我们将使用“new”。我做了一些搜索,对 malloc 和 new 之间的区别的一种解释如下: https://isocpp.org/wiki/faq/freestore-mgmt#new-malloc-diff

引用以上链接:

malloc() 通过返回 0 报告内存耗尽。new 通过抛出异常 (bad_alloc) 报告分配和初始化错误。

但是操作系统(Linux 或 Windows)对这个 bad_alloc 异常有何反应?

【问题讨论】:

  • 操作系统对这些事情没有反应。这就是这些事情的原因。操作系统拒绝内存分配尝试。寻找VirtualAllocHeapAllocmmapsbrk
  • @ZanLynx:你为什么要在 comment 中回答?使用答案部分。
  • @LightnessRacesinOrbit:因为已经有了很好的答案,我只想回答问题的一部分。
  • @ZanLynx:Stack Overflow 的软件支持多个答案。

标签: c++ c memory-management


【解决方案1】:

他们没有。操作系统不需要对任何事情做出“反应”。您的程序可能想要对条件做出反应,或者它可能会留下未处理的异常并终止。无论哪种方式,内存都没有分配,操作系统也不再关心,如果它首先关心(甚至知道)!

【讨论】:

  • “操作系统不再关心”它甚至可能不知道发生了什么,小分配甚至很少达到操作系统级别。
  • 这不太正确。 Linux中有OOM杀手,它的作用是在内存紧张的情况下杀死进程。
  • @SeverinPappadeux:这完全不相关。
  • @5gon12eder:奇怪,但合规(例如,如果没有操作系统,或者——也许更现实地在嵌入式开发之外——如果实现具有可设置的内存限制,已达到) .
  • @5gon12eder 没什么奇怪的,ulimit、setrlimit、cgroups 总是会发生
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2021-05-06
  • 2013-06-16
  • 2015-05-07
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多