Ошибка C: размер массива слишком велик

Я попытался скомпилировать этот код C:

#define MAX_INT 2147483647

int main()
{
   int vector[MAX_INT];
   return 0;
}

Я использую компиляторы C, предоставляемые проектами MinGW и MSYS, то есть MinGW / MSYS. Компилятор MinGW - это «gcc версии 6.3.0 (MinGW.org GCC-6.3.0-1)», которая является самой последней версией и имеет модель потока win32, а компилятор MSYS - «gcc версии 3.4.4 (специальный msys)». с моделью резьбы posix.

Это постоянное значение MAX_INT устанавливается в константе «__INT_MAX__», предоставленной заголовком «limits.h».

Как я могу избежать этой проблемы и скомпилировать свой самый простой код?


person Graco Babeuf    schedule 07.03.2018    source источник
comment
Это равняется 8 гигабайтам intсек. Вы компилируете для 64 бит? У вас 8 гб оперативной памяти? Затем попробуйте malloc это, так как он точно не поместится в стек.   -  person HolyBlackCat    schedule 07.03.2018
comment
Могу я спросить: что ты собираешься делать со всеми этими инсайдами?   -  person Bathsheba    schedule 07.03.2018
comment
Нет, у меня нет такого количества памяти. Спасибо за разъяснения.   -  person Graco Babeuf    schedule 07.03.2018
comment
@Bathsheba Я пытаюсь собрать исходный код OpenSSH.   -  person Graco Babeuf    schedule 07.03.2018
comment
@GracoBabeuf И как именно приведенный выше код помогает вам в создании OpenSSH?   -  person Eugene Sh.    schedule 07.03.2018
comment
@EugeneSh. Это постоянное значение устанавливается для переменной, присутствующей в исходном коде OpenSSH.   -  person Graco Babeuf    schedule 07.03.2018
comment
Какая константа и зачем вам этот массив? Я могу гарантировать, что для компиляции OpenSSH не потребуется выделять 8 ГБ в стеке.   -  person Eugene Sh.    schedule 07.03.2018
comment
@EugeneSh. Это значение, 2147483647 = 8 ГБ, установлено на константу IOV_MAX в коде atomicio.c.   -  person Graco Babeuf    schedule 07.03.2018
comment
И что? Зачем нужен массив такого размера?   -  person Eugene Sh.    schedule 07.03.2018
comment
Пока не знаю.   -  person Graco Babeuf    schedule 07.03.2018
comment
Тогда тебе это не нужно. Задача решена.   -  person Eugene Sh.    schedule 07.03.2018


Ответы (1)


Ваш стек не будет настолько большим, чтобы содержать массив, это основная проблема. Попробуйте установить размер стека, используя следующие строки, как предложено в Увеличьте размер стека при компиляции с mingw? при компиляции

gcc -Wl,--stack,N
where N is stack size. E.g. gcc -Wl,--stack,4194304

Также, как упоминалось в комментариях, вам, возможно, придется скомпилировать для 64 бит и потребуется такой большой объем ОЗУ или, возможно, большой файл подкачки.

person Sreedev Shibu    schedule 07.03.2018