【发布时间】:2009-04-25 13:41:45
【问题描述】:
如果我的应用程序在我调用 new() 时内存不足,我会得到异常,而 malloc() 我会得到 0 指针。
但是如果我调用带有一些局部变量的方法呢?它们也占用内存。有没有办法为“正常”变量保留内存?这样即使 new() 抛出异常,我也可以捕获它,修复内容并仍然像往常一样调用方法。
【问题讨论】:
标签: c++ memory-management
如果我的应用程序在我调用 new() 时内存不足,我会得到异常,而 malloc() 我会得到 0 指针。
但是如果我调用带有一些局部变量的方法呢?它们也占用内存。有没有办法为“正常”变量保留内存?这样即使 new() 抛出异常,我也可以捕获它,修复内容并仍然像往常一样调用方法。
【问题讨论】:
标签: c++ memory-management
您的数据以以下三种方式之一分配:
你通常不应该用完堆栈空间,除非你执行一些繁重的递归。
【讨论】:
C++ 语言不提供任何机制来为局部变量保留内存。您的特定 C++ 实现和/或操作系统可能会提供一些增加总堆栈大小的方法,但这通常不是必需的。
还请注意,如果对 new 的调用确实失败了,您实际上几乎无法从中恢复。许多人(包括我)不再费心检查新的故障。
【讨论】:
编译器知道每个堆栈需要多少内存。但是,足够多的堆栈(由递归引起)会使您的程序崩溃——可能没有其他方法可以解决此问题。
该标准有一个有趣的附件,称为实施数量。这是非规范性(信息性),因此不应被视为绝对真理,而是为您提供一个公平的想法。
【讨论】:
New 从堆中分配内存,但本地变量通常位于堆栈上 - 这可能会溢出,但可能性较小,具体取决于您的平台。你能提供更多细节吗?
【讨论】: