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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 17:53   #21
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Большое спасибо! Вот это да! Я недодумался проверить. Пучков был прав, как и p51x. Если память критична, то нужно динамический массив брать почастям. Хотя может и std::vector<bool> хватить


Большое спасибо!

Давайте вместе подумаем, как сделать двумерный std::vector<bool>?
Код:
std::vector< std::vector<bool>  > vec(4800);
	for (int i = 0; i < 4800; ++i)
		vec[i].resize(2400);
Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Кто подскажет. Почему программа аварийно завершается?

Код:
#include <iostream>

int main()
{
    int arr[4800][2400];

    std::cout << sizeof(arr) << std::endl;

    return 0;
}
В стэк не лезет этот здоровый массив и происходит переполнение. ОТ свободной оперативы тут зависимости нет.
pu4koff вне форума Ответить с цитированием
Старый 22.10.2014, 18:34   #22
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
std::vector< std::vector<bool>  > vec(4800);
	for (int i = 0; i < 4800; ++i)
		vec[i].resize(2400);
В стэк не лезет этот здоровый массив и происходит переполнение. ОТ свободной оперативы тут зависимости нет.
Спасибо! Точно! Статический массив же в стеке создаётся. Вот бы заранее знать размер стека и на этапе компиляции выводить сообщение: "Вы не можете создать массив указанного размера. Максимальный размер столько-то". Но ведь на другой машине размер стека может быть меньше. Отдадим такое приложение пользователю, а потом гадай почему оно рушится

А вот объект класса vector - динамически с помощью new берёт память из оперативы

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
std::vector< std::vector<bool>  > vec(4800);
	for (int i = 0; i < 4800; ++i)
		vec[i].resize(2400);
Пример красивше, чем я предложил! Спасибо!

Последний раз редактировалось Stilet; 22.10.2014 в 19:03.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация мира O m n i s Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 29.10.2013 23:12
Хранение значений в массиве и их подсчет. manula Microsoft Office Excel 9 12.07.2013 14:47
Web карта мира mutabor Свободное общение 2 11.09.2009 22:19