栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C / C ++中处理内存不足情况的合适方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C / C ++中处理内存不足情况的合适方法是什么?

好吧,如果您遇到分配内存失败的情况,那么您将获得一个

std::bad_alloc
例外。异常导致程序堆栈被取消缠绕。很有可能,应用程序逻辑的内部循环不会处理内存不足的情况,只有应用程序的更高级别可以这样做。由于堆栈即将解开,因此将释放大量内存-
实际上,它应该几乎是程序所使用的所有内存。

一个例外是当您请求无法满足的很大(例如几百MB)内存块时。但是,当发生这种情况时,通常会剩下足够小的内存块,这将使您能够优雅地处理故障。

堆栈展开是您的朋友;)

编辑: 刚意识到这个问题也用C标记了-如果是这种情况,那么当发现内存不足的情况时,您应该让您的函数手动释放其内部结构;不这样做是内存泄漏。

EDIT2: 示例:

#include <iostream>#include <vector>void DoStuff(){    std::vector<int> data;    //insert a whole crapload of stuff into data here.    //Assume std::vector::push_back does the actual throwing    //i.e. data.resize(SOME_LARGE_VALUE_HERE);}int main(){    try    {        DoStuff();        return 0;    }    catch (const std::bad_alloc& ex)    {   //Observe that the local variable `data` no longer exists here.        std::cerr << "Oops. Looks like you need to use a 64 bit system (or "          "get a bigger hard disk) for that calculation!";        return -1;    }}

EDIT3:
好的,据评论员说,有一些系统在这方面没有遵循标准。另一方面,在这样的系统上,无论如何您都将成为SOL,所以我不明白为什么他们值得讨论。但是,如果您使用的
这样的平台,则应牢记这一点。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号