Я отлаживаю программу, которая разбилась, потому что для моего вектора, который нужно перераспределить, нельзя использовать непрерывную память. Итак, у меня вопрос, почему виртуальная память не используется? Каким образом можно использовать виртуальную память? Благодарю.Когда будет использоваться виртуальная память (окна)?
ответ
Виртуальная память автоматически используется ОС. Вам не нужно заботиться об этом.
В вашем случае, скорее всего, вы запустите 32-битное приложение. Пользовательское адресное пространство для 32-разрядного процесса в Windows ограничено 2 ГБ (ну, 3 ГБ, если Windows загружается с определенным ключом). Если вашему вектору требуется более нескольких сотен мегабайт смежного адресного пространства, это может стать проблемой (из-за фрагментации адресного пространства).
Конечно, любой процесс может закончиться без памяти (даже при использовании виртуальной памяти и файла подкачки и всего остального). Взгляните на использование памяти вашей программой в диспетчере задач.
В настоящее время используется память 300 МБ, тогда это необходимо перераспределить. Да, это 32-битное приложение. Thannks. – user1558064
Виртуальная память - это единственная память, которую вы когда-либо получали как программу, работающую на современной ОС (Linux, Unix, Windows, MacOS, Symbian и т. Д.).
Похоже, ваша проблема в том, что не существует одного смежного диапазона виртуальных адресов, который достаточно велик для вашего вектора [1]. Я подозреваю, что происходит то, что вам нужно, скажем, более 1,5 ГБ в 32-битном процессе, который может использовать только 2 ГБ одновременно, поэтому на каждом конце не так много «комнаты», чтобы набивать другие биты до «средний» меньше 1,5 ГБ - в частности, если у вас есть вектор, который растет, вам понадобятся две копии вектора, одна в текущем размере и одна в два раза, чтобы скопировать.
Простым решением, если вы знаете, насколько велик вектор, нужно установить его размер, например. vector<int> vec(some_size);
Если вы не знаете, есть еще несколько решений:
Если у вас есть 64-битная ОС, вы можете попробовать установить LARGEADDRESSAWARE
флаг для исполняемого файла (если это Windows). Это должно дать вам еще больший объем памяти, поскольку 64-разрядная ОС не должна резервировать большой кусок пространства памяти для самой ОС (которая живет далеко за пределами 32-разрядного диапазона адресов. В 32-разрядной ОС , вам необходимо загрузить операционную систему с/3GB и установите выше флаг.
Или компилировать код как 64-бит (после обновления до 64-разрядной ОС, если это необходимо).
[1] Если, конечно, вы не пишете драйвер и не пытаетесь выделить много мегабайт физической памяти в качестве буфера для использования в DMA, но, я думаю, вы бы так сказали.
Проблема не имеет ничего общего с памятью или даже с виртуальной памятью. Массив требует смежного диапазона адресов. Адрес s темп (обычно 2 ГБ в программе Win32) фрагментирован, так что доступного места недостаточно.
Если бы вы могли получить адреса, Windows автоматически обеспечила бы виртуальную память, чтобы идти с ними.
Пришло время переместить приложение до 64 бит.
- 1. Виртуальная память
- 2. Когда будет использоваться переменная экземпляра и когда будет использоваться свойство?
- 3. Может ли унифицированная память CUDA использоваться как фиксированная память (единая виртуальная память)?
- 4. Fortran: недостаточная виртуальная память
- 5. Виртуальная память и sbrk
- 6. Какая системная память будет использоваться пакетом ssis?
- 7. Операционные системы Виртуальная память
- 8. Виртуальная память на Linux
- 9. Виртуальная память в Visual C++
- 10. gdb: исчерпана виртуальная память
- 11. Указатели и виртуальная память
- 12. Виртуальная память бесконечна?
- 13. cc1plus: виртуальная память исчерпана
- 14. Memcached и виртуальная память
- 15. Когда будет использоваться анонимная функция?
- 16. Когда будет использоваться initWithFormat: arguments:?
- 17. Когда будет использоваться раздел .fini_array?
- 18. виртуальная память исчерпана: не удается выделить память
- 19. Общая память, отмеченная как виртуальная память?
- 20. Виртуальная память, выделенная для процесса
- 21. Виртуальная и физическая память/OutOfMemoryException
- 22. связывание, загрузка и виртуальная память
- 23. Сохраняет ли виртуальная память процесса?
- 24. Правильно релиз выделяется виртуальная память
- 25. Виртуальная память без аппаратной поддержки
- 26. Виртуальная память и перемещаемый код
- 27. Нам еще нужна виртуальная память?
- 28. Обработчик прерываний и виртуальная память
- 29. Виртуальная память никогда не освобождается
- 30. Невысокая виртуальная память для mongodb
Сколько памяти требуется для перераспределения? – Inspired
Знаете ли вы, что такое виртуальная память? –