我有一段代码,我在其中动态创建一些相对较大的对象(14MB),并使用它们填充矢量(大小为260)。我收到了一个错误的分配异常,正在捕获。我的第一个抛出后该应用程序仍然可用,然后当我重新启动它时,再次抛出错误的alloc异常,但该应用程序不再可用。 您知道是否有一种方法可以使它即使在引发异常之后(无论引发异常的次数如何)仍然可用。
谢谢
答案 0 :(得分:1)
现在,由260个14Mb对象组成的阵列将需要约4Gb RAM。棘手的部分是它必须是牢固的块。因此,即使有足够的可用RAM,由于内存碎片,它也可能不可用。您应该尝试使用非连续的容器,例如std::list
或std::vector<std::unique_ptr<obj_t>>
。不管引发异常的次数(假设已捕获到异常),应用程序都是可用的。而且,随着分配粒度的增加,分配内存的可能性也应该会降低。