Выделение памяти для динамического массива.
Тебя сейчас спросят о том, на какой ты платформе...
На какой платформе?
arr = (double*)malloc(sizeof(double)*n*n*n);?
Т.е. при n=1024, ты хочешь 8 Гб одним куском?
Подумай об алгоритме, менее требовательным к памяти.
Если не получается, то выделяй так:
arr = (double**)malloc(sizeof(double*)*n);
for(int i=0; i<n; i++) {
arr[i] = (double*)malloc(sizeof(double)*n*n);
}
Ну и не забудь все malloc проверять, возвращаю они тебе NULL или нормальный указатель.
arr=(int ***)calloc(n,sizeof(int **;
for (i=0; i<n; i++)
{arr[i]=(int **)calloc(n,sizeof(int *;
for (j=0; j<n; j++)
{arr[i][j]=(int *)calloc(n,sizeof(int;}
}
хотя может такое и можно...
проц 64 разрядный?
я бы на месте операционки на такое обиделся.
а сколько у тебя памяти-то? и еще, насколько я помню, больше 4 гб все равно выделить нельзя
Ps: на какой ты платформе?
да, пардон, а платформа-то какая?
Да, я так же как-то(лет 10 назад ) на паскале под досом несколько гигов выделил...
а я не сумел. Потому что там было ограничение на 64k. По крайней мере, десять лет назад
Эээээ... Так я так же, кусочками
Нет. Если выделять динамическую память, то можно было около 300-400 Кб (кусочками, как правильно заметил ПэЖэ) . А если использовать модуль для работы с памятью от Фаронова, то сколько есть на компьютере.
эх, на Фаронова у меня деньги появились только лет 7 назад, когда я уже плавно с паскаля слезал
arr=(int ***)calloc(n,sizeof(int **;
for (i=0; i<n; i++)
{arr[i]=(int **)calloc(n,sizeof(int *;
for (j=0; j<n; j++) ...
начиная с некоторого i, у тебя a[i] = NULL. А строчкой ниже
{arr[i][j]=(int *)calloc(n,sizeof(int;}
}
ты пишешь в a[i][j].
Еще раз советую, поменяй алгоритм. Может у тебя матрица сильно разрежена, на это есть отдельные алгоритмы на работу с ними, а может можно вовсе без нее обойтись.
Количество же память, выделяемой процессу - настройка OC. Во FreeBSD на это есть отдельная переменная sysctl-я. В Линуксе должно быть что-то подобное. Под Виндой - без понятия.
Могу дать свой контейнер - у него довольно высокая скорость работы и память выделяется кусочками
Оставить комментарий
Olimpic
Пишу на С. Мне нужно использовать трехмерный динамический массив n*n*n. Для небольших nвсе работает нормально, а для n>=1000 программа вылетает. От чего зависит, какой объем памяти можно выделить под динамический массив?