将内存使用量保持在可用量内

rwa*_*ace 8 c c++ linux windows memory-management

我正在编写一个程序(一个定理证明器,因为它发生),其内存要求是"尽可能的,请"; 也就是说,它总是可以通过使用更多内存来做得更好,出于实际目的而没有上限,所以它实际需要做的就是使用尽可能多的内存,不多也不少.我可以弄清楚当内存不足时如何优先处理数据以删除最低值的东西; 我试图解决的问题是如何判断这种情况何时发生.

理想情况下,我希望系统调用返回"剩余多少内存"或"我们还没有内存?"; 据我所知,没有这样的事情存在?

当然,malloc可以通过返回0来表示内存不足,而new可以调用处理程序; 这些都不是理想的信号,但总比没有好.然而,一个问题是我真的想知道物理内存何时耗尽,所以我可以避免深入交换,从而使一切都停止; 我不认为有任何方式可以问"我们还要交换吗?" 或者告诉操作系统"不要交换我的账户,如果涉及到这个问题就失败我的请求"?

另一种方法是找出机器中有多少RAM,并监控程序目前使用多少内存.据我所知,通常没有办法告诉前者?我还得到的印象是没有可靠的方法来告诉后者,除非使用簿记员功能包装malloc/free(这在C++中更有问题).

我有什么办法吗?

理想的是便携式解决方案,但我怀疑这不会发生.如果做不到这一点,在Windows上运行的解决方案和在Unix上运行的另一个解决方案将会很好.如果做不到这一点,我可以使用适用于Windows的解决方案和适用于Linux的另一种解决方案.

Kla*_*aim 6

我认为使用所有可用内存的最有用和最灵活的方法是让用户指定要使用的内存量.

让用户在配置文件中或通过接口编写它,然后创建一个不会提供超过此内存的分配器(或类似的东西).

这样,您不必查找有关当前计算机的统计信息,因为操作系统也可以运行其他程序,因此总会产生偏差.甚至不谈论操作系统管理缓存的方式,32位和64位之间的差异使得地址空间限制了您的分配等.

最后,当用户提供时,人类智能(假设用户知道使用的上下文)实现起来更便宜.