2010-10-22 2 views
1

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

+1

Что вы больше всего беспокоишь? Обычно ОС и распределитель по умолчанию обрабатывают вещи (включая BIG вещи :) просто отлично. –

+0

ihave программа, которая обрабатывает бинарные деревья, очень большие и генерирует математические выражения, отформатированные как строка (символическая математика), те выражения, добавленные в большой массив, однако в процессе добавления мне нужно поместить их в нужное место, например если бы это была матрица. – labotsirc

ответ

9

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

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

+0

+1 - хотя вызов, который вы ищете в Windows, является «MapViewOfFile». –

+0

@Billy O'Neal спасибо, изменил это. – zneak

+0

спасибо, тогда автоматический обмен ОС должен позаботиться о том, что нужно кому-то, мне было просто любопытно, если бы было лучшее обходное решение – labotsirc

1

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

+0

нормально, очень ясно, я думаю, что просто использую swap, обрабатываемый ОС. если он справится с этим разумно, тогда я бы не достиг лучшего решения, чем это – labotsirc

+0

и, конечно же, спасибо! – labotsirc

+0

, если у вас много памяти сразу, вы можете столкнуться с трудностями при сбое, которые заставляют вашу программу работать медленно, потому что большая часть ее памяти находится на странице/swap, просто попробуйте и сохраните ее как можно более чистой, чтобы избежать этого проблемы производительности в зависимости от того, что вы хотите сделать –

Смежные вопросы