У меня есть приложение, которое выделяет память «новым» и освобождает их с помощью «delete» в некоторых частях кода. Проблема заключается в том, что всякий раз, когда он превышает лимит памяти системы (скажем, 2 ГБ), Windows отправляет сигнал Kill в этот процесс. Я думаю, что это не так, поскольку он должен использовать пространство подкачки (я думаю, что в окнах это называется виртуальной памятью), правильно? Мое приложение написано на C++/Visual Studio.Приложение на C++ превосходит память, но не использует виртуальную память
ответ
Here is how you can make it up to 3GB for a process; Это абсолютный максимум, который вы можете получить для 32-битных оконных приложений. Более того, вам придется использовать 64-битную версию окон.
Это очень много памяти. возможно, вы могли бы рассмотреть возможность разделения вашего приложения на несколько процессов и общения между ними.
Windows не использует сигналы. Вы должны получить исключение std :: badalloc, когда у вас закончится нехватка памяти. Который, когда uncaught, автоматически запустит функцию terminate(). Исключение отображается в окне «Вывод».
Я слишком близко не смотрел на это, но вы можете найти ответы, которые вы хотите здесь:
Can you allocate a very large single chunk of memory (> 4GB) in c or c++?
ОС не убивает приложение, необработанное исключение делает. Вам нужно будет изучить ваше приложение с помощью perfmon и посмотреть эти счетчики, рабочий набор, виртуальные байты, частные байты. Вы получите исключения, когда ваши зарезервированные байты будут близки к 2 ГБ. Таким образом, ваши байт-байты и RAM-байты намного меньше.
Here is a nice article on Virtual Address Space, including committed vs reserved.
Мораль этой истории, не пытаются выделить, когда зарезервированные байты приближается к 2 Гб, для 32-разрядного процесса.
- 1. Ядро ОС использует виртуальную память для себя?
- 2. Как освободить виртуальную память?
- 3. Поддерживает ли Android виртуальную память
- 4. Как приложение MFC отправляется в виртуальную память?
- 5. Использует ли память MemoryDC память или память на видеокарте?
- 6. Если физическая память отображает оперативную память и виртуальную память на жестком диске, где происходит логическая память?
- 7. Можно ли запустить виртуальную память на Linux?
- 8. Память использует лимит на iPhone
- 9. Повторно использует память?
- 10. Где Linux включает виртуальную память?
- 11. Мое приложение использует память более 50 МБ
- 12. Возможно ли, чтобы память отображала сокет в виртуальную память?
- 13. Hadoop не использует доступную память
- 14. Как определить, какая основная память использует приложение
- 15. Необходимо ли отображать память, выделенную устройством ОС, в виртуальную память?
- 16. Как Кассандра использует память
- 17. Использует ли переменная память?
- 18. Выделить виртуальную память до окончания работы ОЗУ
- 19. CLION использует системную память чрезмерно
- 20. Приложение Xcode не освобождает память
- 21. Кто создает виртуальную память в Linux?
- 22. Как очистить виртуальную память без закрытия matlab?
- 23. Как расширить виртуальную память Java в CentOS?
- 24. Как узнать доступную виртуальную память внутри приложения
- 25. Визуально использовать виртуальную память при отладке
- 26. Докер не правильно использует память памяти?
- 27. GIT GC использует память сервера
- 28. Поиск скрытых модулей, читающих виртуальную память ядра?
- 29. Файл Excel использует накопительную память
- 30. Поддерживает ли pyopencl общую виртуальную память (SVM)?
AFAIK, 32-разрядный процесс не может использовать более 2 ГБ в Windows. – ZippyV
Используйте 64-битную версию окон и создайте свою программу в качестве 64-битной цели, если вам нужно больше 2 ГБ. Это предел для 32-битного приложения. – user328543
Я не использую 2 ГБ оперативной памяти в своем процессе. Около 1 ГБ уже используется Windows. Я использую около 1 ГБ ... но в целом он превышает память. Так что 32-разрядная проблема не так. – Nima