如果我的应用程序内存不足,当我调用new()时,我将获得异常,而malloc()我将得到0指针。
但是如果我用一些局部变量调用一个方法呢?他们也占据了记忆。有没有办法为“正常”变量保留内存?所以,即使new()抛出异常,我也可以抓住它,修复东西并仍然像往常一样调用方法。
答案 0 :(得分:6)
您的数据分配方式有三种:
除非你执行一些重复的递归,否则通常不应该耗尽堆栈空间。
答案 1 :(得分:3)
C ++语言没有提供任何为本地变量保留内存的机制。您的特定C ++实现和/或操作系统可能会提供一些增加总堆栈大小的方法,但通常不需要这样做。
另请注意,如果对new的调用失败,那么实际上很难从中恢复。很多人(包括我在内)不再费心去检查新的故障。
答案 2 :(得分:1)
New从堆中分配内存,但是本地变量通常在堆栈上 - 这可能会溢出,但不太可能,具体取决于您的平台。你能提供更多细节吗?
答案 3 :(得分:1)
编译器知道每个堆栈需要多少内存。但是,足够多的堆栈(由于递归引起)会使程序崩溃 - 可能没有其他方法可以解决这个问题。
该标准有一个名为实施数量的有趣附件。这是非规范的(提供信息的),因此不应被视为绝对真理,而是为您提供一个公平的想法。