Выделите виртуальную память, прежде чем закончится ОЗУ - PullRequest
2 голосов
/ 22 октября 2010

возможно ли в программе на C / C ++ выделить виртуальную память (пространство подкачки) для конкретного массива, чтобы программа продолжала использовать ОЗУ для остальных переменных, и, возможно, получить некоторую выгоду при некоторых типах проблем ??

Ответы [ 2 ]

9 голосов
/ 22 октября 2010

Для первой части: почти во всех современных ОС есть способ отобразить файлы в ячейку памяти.Вы можете сделать это и использовать файл как «пространство подкачки», которое вы описываете.Стандарты POSIX определяют mmap (который может использоваться через Linux и Mac OS), а Windows имеет MapViewOfFile .

Для второй части: это сильно зависит отТип проблем, с которыми вы сталкиваетесь.Скорее всего, это только сделает доступ к вашему массиву медленнее (как в «смехотворно медленнее») и ничего не поможет, если только это не огромный массив, и вы ищете способ сэкономить память путем переноса содержимого на жесткий диск.Обычно ваша ОС выделяет пространство подкачки и обрабатывает его так, как считает нужным, поэтому явное использование файла в качестве дополнительной памяти для меня не выглядит хорошим решением.

1 голос
/ 22 октября 2010

Вы должны позволить ОС справиться с этим. Если вы решите «выделить» пространство на самом диске, доступ к вашему массиву будет очень медленным, и, учитывая, что массив может быть очень большим, операции с ним будут длиться вечно. Все текущие ОС должны поддерживать автоматическое размещение памяти вашей программы в файл подкачки или файл подкачки, когда она сочтет нужным. Если вас не интересует снижение производительности, вы можете создать свой собственный массив в «памяти», но я бы рекомендовал против этого, как если бы что-то происходило в вашей программе во время выполнения, тогда это может не очиститься и может привести к дальнейшим проблемам.

...