2017-02-12 21 views
2

Когда я бегу мое приложение в Visual Studio 2015, я вижу в диагностических инструментов, что память процесса застрявших до 2 Гб - как будто есть предел:Visual Studio 2015: память процесса увеличения

Diagnostic

Я читал, что выполнение для x32 ограничивает доступную память, так что необходимо использовать x64. Поэтому я создаю relase, x64, который дает мне результат, показанный выше. Как удалить этот «лимит»?

Примечание: У меня 16 ГБ аппаратного обеспечения (ОС: Windows 10).

+1

Если вы построите для x64, тогда нет предела памяти. Проверьте свою заявку, если она не работает должным образом. – rustyx

+0

Существует несколько скрытый флаг '/ LARGEADDRESSAWARE', который сообщает ОС, что вы можете иметь дело с указателями, у которых их верхний бит установлен на' 1'. Это дает вам ~ 4 ГБ памяти, предполагая, что вы запускаете 32-битный процесс на 64-разрядной ОС. Это очень безопасно в C++, потому что C++ не делает никаких предположений об этом бите. Но собственный x64-код дает вам больше 4 ГБ памяти. – MSalters

ответ

4

Существует не такой предел, это, вероятно, ваш код (или некоторая библиотека, которую вы используете) использует ровно 2 гб памяти.

Если вы попытаетесь выделить более 2 ГБ памяти в приложении x86, вы получите исключение std :: bad_alloc, поскольку ОС не может предоставить больше, несмотря на то, что у вас есть 14 ГБ больше свободной памяти.

Очень простая программа в MSVC2015 скомпилирован как x64, так:

for (int i = 0; i < 4000000; ++i) { 
    char* ch = new char[1024]; 
} 

ест 4ГБ оперативной памяти, и никаких ограничений не накладывается конфигурации по умолчанию.

+0

Спасибо! Этот код вел себя так, как вы сказали, - исключение с 'x86' и 4GB с' x64'. В моем коде я использую OpenCV, Cuda и Intel TBB. Знаете ли вы какие-то пределы? – black

+0

@black не знаю, вам нужно отдельно проверить каждую библиотеку. – Starl1ght

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

  • Нет связанных вопросов^_^