Очень большой массив - массив C против массива C++. Visual Studio - превышает максимум (268435456)
Я пытаюсь создать очень большой массив, к которому я затем получаю следующую ошибку.
char largearray[1744830451];
предупреждение LNK4084: общий размер изображения 1750372352 превышает максимальный (268435456); изображение может не работать
Мне сказали, что я могу использовать C-массив, а не C++ . Я не уверен, что полностью понял ответ моего друга. Я в настоящее время использую Visual Studio 6.0 C++ . Нужно ли мне получить другой компилятор для прямой C или это метод, как объявить массив, который нужно изменить?
Если мне нужно изменить компиляторы, есть ли у кого-нибудь предложения?
2 ответа
char array[size]
синтаксис означает, что массив будет создан в разделе данных вашей скомпилированной программы и не будет размещен во время выполнения.
Код Win32 PE не может превышать 256 МБ (согласно сообщению об ошибке вашего компоновщика), но объявляемый вами массив имеет длину 1,6 ГБ.
Если вы хотите массив 1,6 ГБ, используйте malloc
(и не забудьте позвонить free
!)
... но с какой стати вы используете VC6?
Если вы предварительно задаете размер, то вы ограничены размером стека (размер стека меньше, но он быстрее), поэтому лучше определить размер динамически, что означает, что ваши данные хранятся в куче (куча имеет больший размер, но немного медленнее, чем стек).
Взгляните на http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html который объясняет разницу между стеком и кучей.