Доброго времени суток! Подскажите пожалуйста имеется массив
double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка:
LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000). Что можно сделать?
Re: Как сделать поддержку больших массивов в MS VC
Здравствуйте, ilven, Вы писали:
I>Доброго времени суток! Подскажите пожалуйста имеется массив I>double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка: I>LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000). Что можно сделать?
Здравствуйте, ilven, Вы писали:
I>Доброго времени суток! Подскажите пожалуйста имеется массив I>double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка: I>LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000). Что можно сделать?
Свой класс. Если действительно нужно столько памяти — выделять её динамически, желательно — функцией VirtualAlloc[Ex]. А если массив разряжённый, можно и сэкономить.
Делай что должно, и будь что будет
Re: Как сделать поддержку больших массивов в MS VC
Здравствуйте, ilven, Вы писали:
I>Доброго времени суток! Подскажите пожалуйста имеется массив I>double incidence[maxdim][maxdim]
небось глобальным объявил?!
I>и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка:
при создании исполняемого модуля линкер пытается сразу зарезервировать место в секции .data для всего твоего массива... прикинь какого размера должен быть твой ехе-шник! т.е. то что ты назвал "зависаем" есть не что иное, как попытка линкера сгенерить файл размером около гига! (10 000 * 10 000 * sizeof(double))
I>LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000).
а здесь он уже и не пытается ничего создавать, прикинув сколько это всё будет весить...
I>Что можно сделать?
как уже говорилось — выделяй память из кучи!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как сделать поддержку больших массивов в MS VC
Здравствуйте, ilven, Вы писали:
I>Доброго времени суток! Подскажите пожалуйста имеется массив I>double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка: I>LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000). Что можно сделать?
на 32 битах ничего. 2Гб (0x80000000) предел виртуальной адресации для процесса. Можно поиграть с ключом /3Gb. И вообще странно, размер такого массива что-то около 762мб, если double 8-ми байтовый. Как у вас 2гб получилось ?
kalsarikännit
Re[2]: Как сделать поддержку больших массивов в MS VC
Здравствуйте, IID, Вы писали:
IID>на 32 битах ничего.
А как же AWE???
IID>2Гб (0x80000000) предел виртуальной адресации для процесса. Можно поиграть с ключом /3Gb. И вообще странно, размер такого массива что-то около 762мб, если double 8-ми байтовый. Как у вас 2гб получилось?
я предполагаю ответ скрыт в этой строке...
double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка:
LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как сделать поддержку больших массивов в MS VC
Здравствуйте, ilven, Вы писали:
I>Доброго времени суток! Подскажите пожалуйста имеется массив I>double incidence[maxdim][maxdim] и при значении maxdim = 10000 начинаються проблемы в виде зависаний а при дальнейшем увеличении при компиляции (MS VC 7.1) выдается ошибка: I>LINK : fatal error LNK1248: image size (9A1E7000) exceeds maximum allowable size (80000000). Что можно сделать?
А ты уверен, что ты хочешь выделить гигабайт памяти? И прога не зависнет на таких объёмах информации?
Если же тебе позарез нужно именно 10000 на 10000, и у тебя два гига на борту, то выделяй память для подмассивов динамически —
double *incidence[10000];
for (int i = 0; i < 10000; ++i)
incidence[i] = new double[10000];
Правильно работающая программа — просто частный случай Undefined Behavior
Re[2]: Как сделать поддержку больших массивов в MS VC