Перегляньте свій останній Q - коротку версію: Повідомлення про помилку стосується "скоєного" віртуального адресного простору. Якщо ви подивитесь на графік зарахування коштів на другому екрані, ви побачите, що він дійсно на межі або дуже близький.
Обсяг оперативної пам’яті, який є "безкоштовним", "доступним" або "використовуваним", значення не має. Зокрема, дефіцит "доступної" оперативної пам'яті абсолютно не є причиною повідомлення "мало пам'яті" або "поза пам'яттю".
Ліміт фіксації дорівнює загальному RAM + розміру файлу сторінки. Коли виділена пам'ять виділяється, вона негайно стягується з "фіксації заряду", хоча вона фактично ще не використовується ... це означає, що жодна оперативна пам'ять або PF простір не використовується негайно. Фізичний простір (будь то в оперативній пам’яті чи у файлі сторінки) використовується лише тоді, коли фактично посилається на пам'ять. З цього моменту він повинен бути десь, доки програма не звільнить її або не закінчиться весь процес.
Приклад: Припустимо, у вас немає файлу сторінки, отже, ваш ліміт фіксації - 16 ГБ (ваш об'єм оперативної пам’яті). Тепер припустимо, що 8 процесів намагаються VirtualAlloc (MEM_COMMIT) 1 Гб. Результат: вартість комісії збільшується на 8 ГБ. Однак оперативної пам'яті немає негайного впливу! Це так, як ніби ви купували килимок паперу в магазині канцтоварів, але насправді жодного паперу ви не отримали. Щоразу, коли вам потрібен новий аркуш, однак, магічно з'являється один. Поки ви не використаєте весь майданчик (розмір виділеного регіону).
Тепер припустимо, що кожен із цих процесів фактично отримує доступ до 100 МБ із своїх 1 Гб. Використовувана оперативна пам'ять складе лише 800 МБ.
Але оскільки кожен з них може посилатись на всі свої 1 ГБ, ОС має забезпечити, щоб 8 ГБ ОЗУ + простір сторінок ... ну просто оперативна пам'ять у випадку відсутності файлу сторінки ... залишається доступною на випадок, якщо це станеться . Повертаючись до магазину канцтоварів, їм потрібно тримати достатньо паперу на складі, щоб всім давали стільки аркушів, скільки раніше купили.
Відповідно, ОС повинна припинити дозвіл VirtualAlloc (MEM_COMMIT) досягти успіху, коли поточна сума, досягнута, перевищує ліміт.
Чому? Оскільки очікується, що процес перевірить результат VirtualAlloc, щоб побачити, чи вдався він. Після того, як він це зробив і виявив, що алокація досягла успіху, процес має повне сподівання на те, що його подальше посилання на весь здійснений регіон буде успішним.
Якщо Windows дозволила платіж за фіксацію перевищити кількість наявного місця, щоб реалізувати цей простір, то це очікування не завжди може бути виконане.
Швидкий спосіб вирішити - збільшити розмір файлу сторінки за замовчуванням (= початковий). З вищенаведеного пояснення ви повинні зрозуміти, чому це дозволить уникнути повідомлення про помилку, навіть якщо у цей файл ніколи не може бути записано нічого . Знову ж таки, ОС забезпечує доступність місця для всіх платежів, коли це потрібно . Коли процеси виділяють присвячену пам’ять, вони просто говорять: «Ей, ОС, мені це може знадобитися». Це не означає, що вони фактично його використовуватимуть, і це, звичайно, не означає, що вони ще використовували його.
Детальніше дивіться мою відповідь тут .
Тепер .... чому ви використовуєте так багато фіксації, коли ваші процеси, здається, не доповнюють це - інше питання. Щоб почати дивитися на це, будь ласка, покажіть вкладку «Продуктивність диспетчера завдань», розділ «Пам'ять».