-1

我有一个 C++ 程序在崩溃之前使用了大量内存。我可以指定(通过命令行或其他一些技巧)它应该只使用 2Gb RAM,而不是在崩溃之前一直用完系统中的所有内存吗?

该程序处理输入文件的列表。目前,我跟踪程序崩溃的文件,然后在崩溃的文件处重新启动程序。

我正在考虑类似另一个程序的东西,它跟踪这个特定程序使用了多少内存,如果超过限制就将其杀死。我正在开发 Ubuntu 12.10。

PS似乎没有简单的方法可以做到这一点。群众的智慧是主程序应该是固定的。

4

2 回答 2

2

当分配的总容量超过 2gb 时,您可以编写自己的operator new抛出bad_alloc(通常会在内存不足时)。

请注意,这是一种不好的做法,而且容易出错....有几种方法可以绕过全局operator new. 对于您的“破解”目的,它可能就足够了。

于 2013-11-08T02:58:52.623 回答
0

您将限制程序在代码中使用的内存量。

操作系统应该足够聪明,以尽最大努力保持代码运行(例如,将内容缓存到磁盘)。您的系统性能可能会停止运行,但如果磁盘上有空间可用作“额外内存”(如果需要),您的代码仍将执行。

如果你传入一个参数来限制内存,你的代码需要知道如何处理它。

但是,如果您正在消耗整个系统的内存,这表明您的方法至少需要进行一些调整,或者可能需要彻底检修。您的算法可能不够高效,无法处理合理的内存限制。

(这假设您的代码没有泄漏内存。如果是,则修复它。)

于 2013-11-08T02:59:43.127 回答