возможно в программе C/C++ выделить виртуальную память (Swap Space) для определенного массива, чтобы программа продолжала использовать ОЗУ для остальных переменных, и, возможно, получить некоторую выгоду от некоторых проблем?Выделить виртуальную память до окончания работы ОЗУ
ответ
Для первой части: практически во всех современных ОС существует способ сопоставления файлов с памятью. Вы можете сделать это и использовать файл как «пространство подкачки», которое вы описываете. Стандарты POSIX определяют mmap
(который можно использовать через Linux и Mac OS), а Windows имеет MapViewOfFile.
Для второй части: это сильно зависит от типа проблем, с которыми вы встречаетесь. Скорее всего, это будет делать доступ к вашему массиву медленнее (как в «смехотворно медленнее»), а ничего не поможет, если только это не массивный массив, и вы ищете способ сохранить память, переместив содержимое на жесткий диск. Как правило, ваша ОС сама выделяет пространство подкачки и обрабатывает его по своему усмотрению, поэтому явное использование файла в качестве дополнительной памяти не выглядит хорошим решением для чего-либо для меня.
Вы должны разрешить ОС обрабатывать это. Если вы решите «распределить» пространство на самом диске, доступ к вашему массиву будет очень медленным, и, учитывая, что массив может быть очень большим, операции на нем потребуются навсегда. Все текущие ОС должны поддерживать автоматическое размещение вашей памяти программы в swap или файле страницы, если сочтет это подходящим. Если вас не интересует удар производительности, вы можете создать свой собственный массив в «памяти», но я бы рекомендовал против этого, как если бы что-то произошло в вашей программе во время выполнения, тогда это может не очиститься и может привести к дальнейшим проблемам.
нормально, очень ясно, я думаю, что просто использую swap, обрабатываемый ОС. если он справится с этим разумно, тогда я бы не достиг лучшего решения, чем это – labotsirc
и, конечно же, спасибо! – labotsirc
, если у вас много памяти сразу, вы можете столкнуться с трудностями при сбое, которые заставляют вашу программу работать медленно, потому что большая часть ее памяти находится на странице/swap, просто попробуйте и сохраните ее как можно более чистой, чтобы избежать этого проблемы производительности в зависимости от того, что вы хотите сделать –
- 1. jenkins: продвигайте до окончания работы
- 2. Не удается выделить память
- 3. Выделить и освободить память до статического метода
- 4. ММАП: Невозможно выделить память
- 5. Почему я не могу выделить бит ОЗУ?
- 6. Как освободить виртуальную память?
- 7. JVM - Сколько ОЗУ я должен выделить
- 8. Сколько я могу выделить память?
- 9. Mysql Query Выделить все данные за час до времени окончания?
- 10. Где Linux включает виртуальную память?
- 11. Поддерживает ли Android виртуальную память
- 12. Как выделить память в java?
- 13. виртуальная память исчерпана: не удается выделить память
- 14. Выделить память для списка
- 15. Выделить память в JavaScript
- 16. Выделить память (сборка x64)
- 17. Невозможно выделить память
- 18. выделить память в C
- 19. Выделить пользовательскую память
- 20. Выделить память для вектора
- 21. Как указатели выделить память
- 22. Как выделить память C
- 23. Как выделить память структуры?
- 24. Выделить постоянную память
- 25. Как выделить память указателям
- 26. Можно ли выделить определенный сектор ОЗУ под Linux?
- 27. Эмулятор Android: Не удалось выделить память: 8 даже с 8 МБ ОЗУ
- 28. Как приложение MFC отправляется в виртуальную память?
- 29. Как очистить виртуальную память без закрытия matlab?
- 30. Можно ли запустить виртуальную память на Linux?
Что вы больше всего беспокоишь? Обычно ОС и распределитель по умолчанию обрабатывают вещи (включая BIG вещи :) просто отлично. –
ihave программа, которая обрабатывает бинарные деревья, очень большие и генерирует математические выражения, отформатированные как строка (символическая математика), те выражения, добавленные в большой массив, однако в процессе добавления мне нужно поместить их в нужное место, например если бы это была матрица. – labotsirc