Блог пользователя Edvard

Автор Edvard, 12 лет назад, По-русски

Всем привет!

Сегодня натолкнулся на задачу в которой не очень большое количество различных инпутов. Я недолго думая написал перебор, который отработал на всех тестах кроме одного. Проблема оказалась в том, что при запуске моей программы на нее видимо накладывается ограничение на максимальное количество оперативной памяти. Поэтому получается такая картинка:

Ну и конечно вопрос: как можно скомпилировать программу, чтобы не было ограничения на память?

P.S.: Компилирую я все под GNU (но есть MVС компилятор) и под виндой.

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

»
12 лет назад, # |
Rev. 5   Проголосовать: нравится +22 Проголосовать: не нравится

Насколько мне известно, на 32-битном Windows адресное пространство в пределах одного процесса для пользователя ограничено 2 ГБ, остальные 2 ГБ отводятся ядру. Доступное пользователю пространство можно увеличить до 3 ГБ, передав ядру определённый параметр при запуске системы: http://msdn.microsoft.com/en-us/library/windows/hardware/ff556232.aspx (по этой ссылке ещё и указывают, как надо компилировать программу для 3 ГБ).

На 64-битном Windows 32-битный процесс по идее может использовать все 4 ГБ (если он скомпилирован так, как выше). Ну и, естественно, для 64-битных программ нет ограничений.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    windows у меня 64битный. Надо видимо просто скомпилировать под 64 бита

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

Скачай 64-битный MinGW и используй столько памяти, сколько есть у машины. Я, было дело, 14ГБ использовал в одном переборе.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Да и надо еще докупить памяти 8 гигов. А под x64 mingw надо с какими то параметрами компилировать или при любой компиляции получается 64битная программа?

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Если использовать 64-битный MinGW, то никаких дополнительных параметров не нужно. Кстати, им же можно собирать и 32-битные проги, если компилятору подать параметр -m32.

»
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

А в момент резкого скачка программа упала? Если нет, то очевидно, что кучу памяти просто отправили в swap-файл.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    В этот момент винда перестала давать проге память и прога упала с exceptionом