Объявление большого массива символов в C ++ - PullRequest
1 голос
/ 24 февраля 2012

Я сейчас пытаюсь объявить массив больших символов.Я использую массив символов в качестве растрового изображения (как в карте логических значений, не тип файла изображения).Следующий код генерирует ошибку компиляции.

//This is code before main. I want these as globals.
unsigned const long bitmap_size = (ULONG_MAX/(sizeof(char)));
char bitmap[bitmap_size];

Ошибка: переполнение в измерении массива .Я понимаю, что пытаюсь, чтобы мой процесс потреблял много данных, и что может быть какое-то ограничение, которое мешает мне сделать это.Мне любопытно, если я делаю синтаксическую ошибку или мне нужно запросить больше ресурсов у ядра.Кроме того, я не заинтересован в создании растрового изображения с некоторым классом.Спасибо за ваше время.

РЕДАКТИРОВАТЬ ULONG_MAX очень сильно зависит от машины, которую вы используете.На конкретной машине, на которой я компилировал свой код, было более 4,2 миллиарда.В общем, я бы не стал использовать эту константу как константу, по крайней мере, для выделения памяти.

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

ULONG_MAX/sizeof(char) совпадает с ULONG_MAX, что является очень большим числом.Фактически, он настолько велик, что у вас нет места для него даже в виртуальной памяти (потому что ULONG_MAX - это, вероятно, число байтов во всей виртуальной памяти).пытаюсь сделать.

4 голосов
/ 24 февраля 2012

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

Используйте malloc() для выделения больших объемов памяти. Но будь реалистом. :)

0 голосов
/ 24 февраля 2012

Насколько я понимаю, максимальный размер массива в c ++ - это наибольшее целое число, которое поддерживает платформа. Вполне вероятно, что ваша константа bitmap_size длинного типа превышает этот предел.

...