Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2013, 03:05   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию большой массив

Здравствуйте.

Код:
unsigned char image[1024][1024][4];
Когда пытаюсь создать массив подобного размера, программа крашает. Почему? Ведь когда я делал очень большой размер, компилятор писал, что массив очень большой, а тут как буд-то все окей.
Артэс вне форума Ответить с цитированием
Старый 02.07.2013, 03:12   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы его где именно делаете? на стеке или в статике или в куче?

если на стеке то там нюансов много как бы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.07.2013, 15:40   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Вот так крашает:

Код:
#include <stdio.h>

int main()
{
char image[1024][1024][4];
}
Интересно, а с глобальной переменной нет

Код:
#include <stdio.h>

char image[1024][1024][4];

int main()
{

}
Для локальных переменных меньше памяти выделяется или что?
Артэс вне форума Ответить с цитированием
Старый 03.07.2013, 16:02   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

локальная память это стек, а он еще менее резиновый чем вся остальная память.
в куче такое лучше размещать(если динамически нужно)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.07.2013, 16:25   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Для локальных переменных меньше памяти выделяется или что?
Да. Виндовс по дефолту на стек выделяет что-то около 2х мегабайт, если не ошибаюсь.

Статическая область памяти - тот же стек, но под её переменные память выделяется процессу при запуске exe столько, сколько нужно.

Поэтому в глобальной области это может сработать.

Хотя вообще то не желательно такие объемы хапать со стека.
_Bers вне форума Ответить с цитированием
Старый 04.07.2013, 16:46   #6
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Здравствуйте.

Код:
unsigned char image[1024][1024][4];
Когда пытаюсь создать массив подобного размера, программа крашает. Почему? Ведь когда я делал очень большой размер, компилятор писал, что массив очень большой, а тут как буд-то все окей.
как было сказано нужно выделять память из кучи динамически, типа:

Код:
unsigned char ***image = new unsigned char** [4];
for (int i = 0; i < 4; i++) {
    image[i] = new unsigned char*[1024];
    for (int j = 0; j < 1024; j++) {
        image [i][j] = new unsigned char [1024];
    }
}
Вот как то так.
Может это и чушь, но это моя чушь и я ее никому не отдам.

Последний раз редактировалось Shad0wF1rst; 04.07.2013 в 16:48.
Shad0wF1rst вне форума Ответить с цитированием
Старый 04.07.2013, 16:55   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

статическая память не имеет отношения к стеку совершенно.
и её объем ограничен лишь допустимым для процесса(хотя нюансов там еще больше на самом деле)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.07.2013, 20:56   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

Я про "низкоровневую работу". Тот же самый стек. Смысли, тот же самый механизм работы с памятью.
_Bers вне форума Ответить с цитированием
Старый 04.07.2013, 21:22   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Так то понятно, что с точки зрения использования, есть разница между статической областью памяти и локальной.

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


а в плане работы с ней на уровне проца, в общем то да.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести большой массив байт в тип дробное число Skail Общие вопросы Delphi 5 26.01.2013 14:28
Где разместить очень большой массив Yokka C# (си шарп) 19 10.10.2012 15:25
большой массив данных с несколькими переменными Dexter_M Microsoft Office Excel 27 04.10.2011 14:21
Дан динамический массив строк, вывести все слова начинающиеся с большой буквы C++ builder Memphi[s] Помощь студентам 0 02.03.2011 16:34
Как виделить большой кусок памяти под массив? Tania Мультимедиа в Delphi 7 23.04.2010 01:53