У меня есть небольшая программа на С++, для которой требуется большой двумерный массив.
int distanceArray[282][9900000];
Я знаю, что стандартное 32-битное консольное приложение не сможет выделить столько памяти для моего процесса из-за ограничения в 2 ГБ для 32-битных приложений. Однако, несмотря на то, что я настроил свой компилятор на использование собственного набора инструментов amd64, я все равно получаю ту же ошибку, когда пытаюсь собрать свое приложение:
Error C2148 total size of array must not exceed 0x7fffffff bytes
В моей системе 16 ГБ ОЗУ, поэтому я знаю, что моя физическая память не должна быть проблемой. Если мои расчеты верны, это должно занимать всего около 3 ГБ. Однако я не понимаю, почему я не могу заставить 64-битный компилятор работать правильно. Я следовал инструкциям на веб-сайте Microsoft, где описано, как использовать 64 битный компилятор, но независимо от того, что я делаю, я получаю ту же ошибку. Любая помощь будет принята с благодарностью. Благодарю вас!
Я знаю, что этот вопрос задавался раньше, но существующие ответы мне не помогли. Спасибо за любую попытку помочь мне найти мою проблему.
std::vector<std::vector<int>>
. В конце концов, он помечен как C++. 11.02.2017int distanceArray[282][9900000];
, за исключением того, что он распределяется динамически, и поэтому его можно использовать в качестве замены в большинстве контекстов. Если вы хотите сделать его более похожим на С++, вы можете вместо этого использоватьnew[]
, в противном случае, не зная из вопроса, будет ли вектор векторов приемлемой альтернативой, я пошел на самую прямую замену. Кроме того, использование вектора векторов уже было предложено πάντα ῥεῖ, поэтому я буду повторять только то, о чем, как я предполагал, исходный постер уже знал. 11.02.2017INT_MAX
(см.<limits.h>
). Динамический или статический. В С или С++. 16.09.2018