C как выделить более 2ГБ памяти - PullRequest
0 голосов
/ 03 апреля 2020

Я использую code :: blocks для компиляции C программы. P C: Windows 8,2 64b с 32 ГБ ОЗУ + 32 ГБ подкачки при необходимости. Мне нужно 24 ГБ для хранения промежуточных значений, чтобы программа работала достаточно быстро (около X12 быстрее).

Мне нужно выделить около 240 блоков по 100 МБ каждый. Mallo c возвращает NULL в 19-м блоке (есть некоторые другие небольшие блоки), поэтому общее количество составляет 2 ГБ.

Есть ли способ скомпилировать / связать программу, чтобы иметь возможность выделить эту память? Другой инструмент, чем code :: blocks? (Я сделал это с Matlab, он работает нормально, нет проблем с памятью, но Matlab действительно медленнее, чем скомпилированный C).

С уважением. Mich.

1 Ответ

1 голос
/ 03 апреля 2020

Вам необходимо создать его как 64-битное приложение, поскольку 32-битные Windows приложения имеют ограниченный объем адресуемой памяти 4 Гб, большая часть которой зарезервирована для OS et c. Кроме того, я не думаю, что MinGW 32 бит поддерживается больше (?)

  • Загрузите и установите Mingw64. http://mingw-w64.org
  • В Codeblocks, Settings -> Compiler, выберите вкладку исполняемых файлов Toolchain.
  • Укажите путь, например, C: \ Program Files \ mingw -w64 ... (где бы вы его не установили)
  • Нажмите кнопку «автоопределение». Все пути и инструменты g cc теперь должны быть обновлены до 64-битной установки. Компилятор C должен выглядеть примерно так: «x86_64-w64-mingw32-g cc .exe».
...