Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
#1

Размерность std::map - C++

20.11.2013, 23:49. Просмотров 671. Ответов 12
Метки нет (Все метки)

Добрый вечер.

Использую тип данных 16 байтовый. Надо записать несколько десятков миллионов расчетов в
C++
1
map <type, type> val;
C помощью методов ._Max и .max_size() узнаю, что максимальный размер - более 100 миллионов. Проблема : на 24ом миллионе программа завершает свою работу, не занеся все данные и не сделав потом еще ряд вычислений. Завершается успешно, но без последующих вычилений, то есть дело в индексации массива. Может я не точно узнал максимальную размерность массива? Как ее узнать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 23:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размерность std::map (C++):

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования? - C++
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

Стоит ли очищать в деструкторе std::map , std::vecotor? - C++
У меня ещё один нубский вопрос :) Вот если в классе объявлены мапы и вектора, которые по ходу программы как то заполняются, нужно ли мне...

std::map, std::vector и порядок обхода коллекции - C++
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...

Потокобезопасность std::map::end, std::list::end - C++
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

allocator std::map - C++
Подскажите вопрос, есть тестовое задание: Подскажите где про это почитать и разъясните по-возможности, что это вообще такое...

12
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
21.11.2013, 00:12 #2
http://www.cplusplus.com/reference/map/map/max_size/
This is the maximum potential size the container can reach due to known system or library implementation limitations, but the container is by no means guaranteed to be able to reach that size:it can still fail to allocate storage at any point before that size is reached.

Но, а вообще без кода сложно сказать, что произодит.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
21.11.2013, 00:14 #3
Цитата Сообщение от Ilyaa Посмотреть сообщение
Использую тип данных 16 байтовый.
Цитата Сообщение от Ilyaa Посмотреть сообщение
на 24ом миллионе программа завершает свою работу
sizeof ( type ) * 2 * 24000000 / 1048576 = 732.421875 мегабайта только на Ваши данные в узлах, не считая "служебных" данных std :: map и памяти, занимаемой всей остальной программой
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
21.11.2013, 00:33 #4
Цитата Сообщение от Ilyaa Посмотреть сообщение
Может я не точно узнал максимальную размерность массива? Как ее узнать?
Точно никак, может просто памяти не хватить.
0
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,247
Записей в блоге: 1
21.11.2013, 00:55 #5
Дюже интересно, шо ты там, звёзды считаешь шо ль?
0
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
21.11.2013, 15:30  [ТС] #6
Цитата Сообщение от stima Посмотреть сообщение
Но, а вообще без кода сложно сказать, что произодит.
В коде нет смысла. Представьте цикл for и 100 миллионов итераций)

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Дюже интересно, шо ты там, звёзды считаешь шо ль?
Метод шэнкса для более двадцатизначного модуля.

Добавлено через 3 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
sizeof ( type ) * 2 * 24000000 / 1048576 = 732.421875 мегабайта только на Ваши данные в узлах, не считая "служебных" данных std :: map и памяти, занимаемой всей остальной программой
Откуда делитель 1048576?

Памяти оперативной может не хватать?
А как мне узнать максимально допустимый размер выделения памяти под такую задачу? Я имею в виду, что оперативы у меня 8гигов, а раз пороговое значтельно меньше, то есть некое ограничение для моей задачи. Как узнать это ограничение?
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
21.11.2013, 15:38 #7
Зависит от. Подозреваю, что ты компилируешь в 32-битном режиме. Тогда, естессно, все, что ты имеешь - это чуть менее 2 Гбайт для всего-всего: кода программы, статических данных, всех подгруженных DLL, и динамических данных - вот этой самой твоей map. Так что 700 Мбайт только на твои данные, плюс служебные данные map - вуаля, может случиться и так, что памяти тупо не хватило.

Попробуй перекомпилировать в 64-битном режиме и посмотри, что получится.
1
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,068
Завершенные тесты: 1
21.11.2013, 17:32 #8
Цитата Сообщение от Ilyaa Посмотреть сообщение
Откуда делитель 1048576?
байты в мегабайты чтобы перевести
1
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
21.11.2013, 19:37  [ТС] #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
все, что ты имеешь - это чуть менее 2 Гбайт для всего-всего: кода программы, статических данных, всех подгруженных DLL, и динамических данных - вот этой самой твоей map. Так что 700 Мбайт только на твои данные, плюс служебные данные map
Сколько весят служебные данные map?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.11.2013, 21:25 #10
Цитата Сообщение от Ilyaa Посмотреть сообщение
Сколько весят служебные данные map?
3 указателя на один элемент.
Т.е. 12 байт в 32-битном режиме и 24 байта в 64-битном.
0
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
22.11.2013, 16:35  [ТС] #11
Цитата Сообщение от diagon Посмотреть сообщение
12 байт в 32-битном режиме и 24 байта в 64-битном.
Тогда как мои 732 Мбайта забивают допустимый лимит в 2 ГБ?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.11.2013, 16:48 #12
Цитата Сообщение от Ilyaa Посмотреть сообщение
Тогда как мои 732 Мбайта забивают допустимый лимит в 2 ГБ?
12 байт на один элемент, а не на весь контейнер.
Т.е. размер вашего элемента равен 16 + 12 = 28 байт, плюс возможно выравнивание до 32 байт.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
22.11.2013, 23:00 #13
Цитата Сообщение от diagon Посмотреть сообщение
Т.е. размер вашего элемента равен 16 + 12 = 28 байт, плюс возможно выравнивание до 32 байт.
плюс другие данные программы
1
22.11.2013, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 23:00
Привет! Вот еще темы с ответами:

Std::map и key_comp - C++
Есть задача, нужно задать в map класс для сравнения ключей, но классу для сравнения нужен ещё один вспомогательный елемент. Ну вот...

Особенности std::map - C++
Добрый день форумчане, хотел спросить такую вещь, сейчас занимаюсь оптимизацией в графическом движке и возникла такая проблемма, хочу...

Std::map::emplace - C++
То ли я туплю/криво поставил компилятор, то ли это emplace синтаксис кривой, но... Как использовать emplace применительно к map со...

std::map не компилируется - C++
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла &lt;map&gt; и объявлении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru