Сохранение использования памяти в пределах доступного количества

Я ' m написание программы (например, средства доказательства теорем), требования к памяти которой "как можно больше, пожалуйста"; то есть, он всегда может добиться большего успеха, используя больше памяти для практических целей без верхней границы, поэтому на самом деле ему нужно использовать столько памяти, сколько доступно, не больше и не меньше. Я могу понять, как расставить приоритеты для данных, чтобы удалить материал с наименьшим значением, когда не хватает памяти; проблема, которую я пытаюсь решить, заключается в том, как определить, когда это происходит.

В идеале я хотел бы, чтобы системный вызов возвращал «сколько памяти осталось» или «у нас уже нет памяти?»; насколько я могу судить, такого не существует?

Конечно, malloc может сигнализировать о нехватке памяти, возвращая 0, а new может вызывать обработчик; это не идеальные сигналы, но лучше, чем ничего. Проблема, однако, заключается в том, что я действительно хочу знать, когда заканчивается физическая память, чтобы не углубляться в свопинг и, таким образом, заставлять все останавливаться; Я не думаю, что есть способ спросить: «Мы уже должны поменяться местами?» или сказать операционной системе: «Не меняйте местами мою учетную запись, просто откажитесь от моих запросов, если до этого дойдет»?

Другой подход - узнать, сколько оперативной памяти находится в машине, и контролировать, сколько памяти программа используется в данный момент. Насколько я знаю, первое нет вообще возможности сказать? У меня также сложилось впечатление, что нет надежного способа узнать последнее, кроме как обернуть malloc / free функцией бухгалтерского учета (что в этом случае более проблематично в C ++).

Есть ли какие-то подходы, которые мне не хватает?

Идеальным было бы портативное решение, но я подозреваю, что этого не произойдет. В противном случае было бы неплохо использовать решение, работающее в Windows, и другое, работающее в Unix. В противном случае я мог бы обойтись одним решением, работающим в Windows, и другим, работающим в Linux.

8
задан rwallace 24 September 2010 в 09:53
поделиться