如果我的应用程序内存不足会怎样?

Mic*_*ael 1 c++ memory-management

如果我的应用程序内存不足,当我调用new()时,我将获得异常,而malloc()我将获得0指针.

但是,如果我用一些局部变量调用方法呢?他们也占据了记忆.有没有办法为"正常"变量保留内存?所以,即使new()抛出异常,我也可以抓住它,修复东西并仍像往常一样调用方法.

jal*_*alf 6

您的数据分配方式有以下三种:

  • 应用程序启动时会分配静态分配的数据(静态成员或全局变量),这意味着它们确实不会成为问题.
  • 堆栈分配的数据在堆栈上分配(出乎意料!)堆栈是为局部变量和函数堆栈预留的内存区域.如果那里的空间不足,那么未定义会发生什么.某些实现可能会检测到它并为您提供访问冲突/分段错误,而其他实现只会使您覆盖堆数据.在任何情况下,都无法检测到这一点,因为通常情况下无法处理它.如果你的堆栈空间不足,那么你无能为力.你甚至无法调用函数,因为它占用了堆栈空间.
  • 堆分配内存是您调用new/malloc时使用的内存.在这里,您有一种机制来检测内存不足的情况,因为您可能能够处理它.(而不是分配200mb,你可能可以使用100mb,并只是中途交换数据)

除非你执行一些重的递归,否则通常不应该耗尽堆栈空间.