Кажется, что JEP должен выполнить задание
Ваш массив является слишком большим, чтобы вписаться в стек, рассмотреть использование "кучи":
int *sieve = malloc(2000000 * sizeof(*sieve));
, Если Вы действительно хотите изменить размер стека, , смотрят на этот документ.
Подсказка : - не забывают освобождать Вашу динамично выделенную память, когда она больше не необходима.
Вы были бы более обеспеченным выделением его на "куче", не стеке. что-то как
int main(int argc, char* argv[])
{
int * sieve;
sieve = malloc(20000);
return 0;
}
Есть ли некоторая причина, почему Вы не можете использовать alloca () для выделения места, в котором Вы нуждаетесь на стековом фрейме на основе того, насколько большой объект действительно должен быть?
, Если Вы делаете это, и все еще арестовывать стек, помещать его в выделенную "кучу". Я настоятельно рекомендую не объявление его как статичное в основном () и помещение его в сегменте данных.
, Если это действительно должно быть настолько большим и Ваша программа не может выделить его на "куче", Ваша программа действительно не имеет никакого бизнеса, работающего на том типе машины для начала.
, Что (точно) Вы пытаетесь выполнить?
Существует 3 пути:
malloc()
, как другие предложенные плакаты. Не забывайте к free()
это (хотя для main()
не то, чтобы важный - ОС очистит память для Вас на завершении программы). static
к объявлению ограничит видимость единицей). static
- в этом случае он будет выделен в сегменте данных, но видимый только в main()
. Используйте malloc. Вся проверка тип возврата не является пустым, если это является пустым затем Ваша система просто, не имеет достаточной памяти для установки этому много значений.
Это составляет приблизительно 7 МБ стекового пространства. В Visual Studio Вы использовали бы/STACK:###,### для отражения размера, который Вы хотите. Если Вы истинно хотите огромный стек (могло бы быть серьезное основание, с помощью LISP или чего-то :), даже "куча" ограничена small'sh выделениями прежде, чем вынудить Вас использовать VirtualAlloc), можно также хотеть установить PE для создания с/LARGEADDRESSAAWARE (Компоновщик Visual Studio снова), но заголовок PE этого configure, чтобы позволить скомпилированному двоичному файлу обращаться к полным 4 ГБ 32'bit адресное пространство (при выполнении в WOW64). При создании истинно значительных двоичных файлов необходимо было бы также обычно настраивать/bigobj как дополнительный компоновщик пара-Мертер.
И если Вам все еще нужно больше пространства, можно радикально нарушить конвенцию при помощи чего-то средство моделирования к (снова ссылка MSVC) / слияние: который позволит Вам упаковывать один раздел в другого, таким образом, можно будет использовать каждый байт для единственного общего раздела кода/данных. Естественно необходимо было бы также настроить полномочия РАЗДЕЛОВ в файле определения или с #pgrama.