• Главная
  • Карта сайта
Не найдено

Використання більш 2гб пам'яті для 32-бітного додатки

  1. архітектура x86
  2. x86 і x64 операційні системи
  3. Обмеження віртуальної пам'яті в Windows
  4. Функція настройки пам'яті 4GT
  5. прапор IMAGE_FILE_LARGE_ADDRESS_AWARE
  6. 4GB Patch
  7. CFF Explorer
  8. EDITBIN.EXE
  9. висновок

Сьогодні я розповім про обмеження віртуального адресного простору Windows і про те, як боротися з помилками «Недостатньо пам'яті», що виникають у 32-бітних програм та ігор, коли обсяг використовуваної ними пам'яті досягає 2 Гігабайт. Кілька простих способів обійти це обмеження і змусити додатки використовувати більш 2ГБ пам'яті.

Для початку трохи теорії про архітектуру процесорів і операційних систем, так як саме ці фактори визначають кількість пам'яті доступне для додатків. Тим, кому теоретична частина не цікава, можете відразу перейти до опису рішення проблеми .

архітектура x86

Всі сучасні десктоп процесори Intel або AMD (і не тільки) засновані на x86 архітектурі, яка була вперше реалізована в процесорах Intel 8086, що вийшли в 1978 році. Аж до Intel 80386 (i386) процесори були 16-bit і могли використовувати лише до 16 MB ОЗУ. Що вийшли в 1985 році i386 процесори стали 32-bit, що дає можливість адресації до 4 GB оперативної пам'яті (до 64 GB в режимі PAE, але при цьому додатки можуть використовувати так само тільки до 4 GB).

Що вийшли в 1985 році i386 процесори стали 32-bit, що дає можливість адресації до 4 GB оперативної пам'яті (до 64 GB в режимі PAE, але при цьому додатки можуть використовувати так само тільки до 4 GB)

Ясна річ, що в ті роки 4 GB виглядало практично недосяжним. Але ніщо не стоїть на місці і з часом цього виявилося мало. У 2003 році компанія AMD (ага, вже не Intel) в своїх нових процесорах лінійки Opteron впровадила розширення x86-64 (інші назви: AMD64, Intel64, x64, EM64T). Це розширення мало ряд поліпшень: 64 бітні основні регістри, додаткові регістри та розширення адресного простору. Поточна реалізація дозволяє використовувати до 256 TB віртуального адресного простору, при теоретичному максимумі в 16 EB (ExbiByte - 264 байт). Процесори Intel підтримують розширення x86-64 (AMD64) зі старших моделей Pentium 4 (Prescott і далі).

x86 і x64 операційні системи

Застосовується до ОС (Операційні Системи) використовується позначення x86 (в побуті часто позначається як x32) і x64, що є 32-розрядними і 64-розрядними відповідно. Їх відмінність в тому, що x64 підтримують AMD64, даючи можливість використовувати його переваги, а x86 його не підтримує (і не використовує). На практиці це дає певні особливості і обмеження.

  • 64-розрядна ОС вимагає процесора з підтримкою AMD64 (всі сучасні процесори від Intel або AMD)
  • 32 розрядна ОС може працювати, як на процесорі з підтримкою AMD64, так і без неї (але таку старовину ще знайти потрібно)
  • 64-розрядні додатки працюють тільки на 64-розрядної ОС
  • 32-розрядні додатки повноцінно працюють і на x32 і на x64 ОС, але переваг AMD64 вони використовувати не можуть

На даний момент йде поступова відмова від x86 операційних систем на користь x64. Наприклад, серверні версії Windows, починаючи з 2008 R2, випускаються тільки 64-розрядними. Те ж Microsoft часто загрожують зробити і для нових десктопних версій, але поки не роблять.

Обмеження віртуальної пам'яті в Windows

У кожної версії Windows є певні обмеження щодо використання фізичної і віртуальної пам'яті (можна подивитися по засланні ). І якщо обмеження фізичної пам'яті пов'язано, скоріше, з ліцензуванням, то з обмеженнями віртуальної все трохи складніше.

Нас же цікавить тільки віртуальна пам'ять, так як саме з нею взаємодіють додатки. Якщо не вдаватися в подробиці, то технологія віртуальної пам'яті дозволяє кожному процесу мати свою власну пам'ять - адресний простір, яке віртуально не перетинається з адресними просторами інших процесів. Тобто додаток «вважає», що пам'ять належить тільки йому одному і може навіть використовувати більше наявного обсягу фізичної ОЗУ, а вже розподілом і узгодженням займається ОС.

І так, для 32-розрядних Windows загальне обмеження віртуальної пам'яті - 4 GB (як і для 32-розрядних процесорів). 64-розрядні мають обмеження від 15 до 256 TB в залежності від версії. Але, будь-яка редакція Windows ділить загальний адресний простір на дві частини: user mode (призначений для користувача режим) - пам'ять, доступна додаткам і kernel mode (режим ядра) - пам'ять, яка використовується системою. І, якщо на х64 додатків дістається 8 - 128 GB, то для x32 це всього лише 2 GB (фактично ~ 1.7-1.8 GB). При досягненні цього ліміту, додаток видасть помилку і буде закрито, або просто «вилетить» без будь-яких попереджень.

При досягненні цього ліміту, додаток видасть помилку і буде закрито, або просто «вилетить» без будь-яких попереджень

Як влаштована пам'ять в Windows, детально розписано в статтях Марка Руссиновича.

Функція настройки пам'яті 4GT

Для Windows x86 існує офіційний «милиця», що дозволяє перерозподілити віртуальну пам'ять, даючи додатків до 3 GB, при цьому зменшуючи системне простір до 1 GB. називається це 4-Gigabyte Tuning . Як це виглядає, продемонструвати на такій схемі (зліва - по-замовчуванню, праворуч - із застосуванням 4GT):

Як це виглядає, продемонструвати на такій схемі (зліва - по-замовчуванню, праворуч - із застосуванням 4GT):

Чи включається опція наступним чином:

Для Windows XP / 2003 - додаванням ключа / 3GB у файлі Boot.ini

Для Windows Vista / 7/8 - команда BCDEdit / set increaseuserva 3072 (Пуск> Стандартні (Start> Accessories), правою кнопкою по Командний рядок (Command Prompt) - Запуск від імені адміністратора (Run as Administrator), ввести і запустити команду).

Для Windows Vista / 7/8 - команда BCDEdit / set increaseuserva 3072 (Пуск> Стандартні (Start> Accessories), правою кнопкою по Командний рядок (Command Prompt) - Запуск від імені адміністратора (Run as Administrator), ввести і запустити команду)

Включення цієї опції може привести до некоректної роботи деяких драйверів, програм або Windows в цілому.

прапор IMAGE_FILE_LARGE_ADDRESS_AWARE

Дозволяє програмі використовувати понад 2 GB віртуального адресного простору, тільки якщо воно скомпільовано з параметром IMAGE_FILE_LARGE_ADDRESS_AWARE. Всі 64-розрядні додатки за замовчуванням мають цей параметр (в цьому їх суть), а ось 32-розрядні можуть мати його або не мати - тут все залежить від програміста, який поставив цю опцію при компіляції або не поставив.

Цей прапор - це те, що нам потрібно, щоб змусити 32 бітове додаток використовувати більше 2 GB пам'яті. Запуск такого 32-bit додатки на Windows x32 із застосуванням 4GT дасть йому до 3 GB пам'яті (фактично ~ 2.8 GB), а на Windows x64 все 4 GB.

На щастя, виставити цей прапор для будь-якої програми можна самостійно. Для цього є кілька способів.

Перед тим, як приступити переконайтеся, що додаток, яке ви хочете змінити, в даний момент закрито.

4GB Patch

Найпростіший спосіб.

Для початку скачайте програму з сайту учасника або звідси:

Після запуску 4gb_patch.exe відкриється стандартне діалогове вікно «Відкриття файлу», де вам потрібно вказати .EXE файл, який ви збираєтеся змінити.

Відразу після вибору файлу з'явиться вікно програми, підтверджуючи успішну операцію. Далі ви можете змінити інший файл (натиснувши Another File) або закрити програму (натиснувши OK).

Майте у вигляді, що у програми не мають зворотної дії, тому в папці із змінним файлом вона зберігає його резервну копію з розширенням .Backup.

CFF Explorer

Для тих, хто точно знає, що робить.

CFF Explorer - безкоштовна і досить потужна програма для роботи з PE заголовками від автора 4 GB Patch. завантажити можна з сайту учасника .

  1. Встановивши і запустивши програму, відкриваємо потрібний .EXE файл.
  2. Переходимо до пункту File Header.
  3. Клацаємо в правому нижньому кутку з'явилася таблиці (так і написано - Click here).
  4. У вікні виставляємо галочку навпроти App can handle> 2gb address space.
  5. Застосовуємо і зберігаємо файл.

Як видно, програма дозволяє редагувати і інші параметри, має велику кількість інструментів і навіть вбудований дизассемблер.

Зворотна дія - те ж саме, з тією різницею, що галочку ми прибираємо.

EDITBIN.EXE

Невелика утиліта EDITBIN.EXE, яка є в комплекті Microsoft Visual Studio.

Дії такі (запускається з командного рядка):

Виставити: EDITBIN.EXE / LARGEADDRESSAWARE name.exe

Прибрати: EDITBIN.EXE / LARGEADDRESSAWARE: NO name.exe

За допомогою цього ж параметра (/ LARGEADDRESSAWARE) задається використання пам'яті для проектів Visual Studio.

висновок

Підсумовуючи вищесказане - для того, щоб 32-розрядний додаток могло використовувати більше 2 GB пам'яті повинні бути дотримані дві умови:

  1. Додаток має бути встановлено на Windows x64 (краще) або Windows x86 з включеним 4GT .
  2. Додаток має мати прапор IMAGE_FILE_LARGE_ADDRESS_AWARE

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью