Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
20.11.2013, 23:49     Размерность std::map #1
Добрый вечер.

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

std::map, std::vector и порядок обхода коллекции C++
allocator std::map C++
C++ std::map не компилируется
std::map нефикс. размер? C++
Стоит ли очищать в деструкторе std::map , std::vecotor? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
21.11.2013, 00:12     Размерность std::map #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.

Но, а вообще без кода сложно сказать, что произодит.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
21.11.2013, 00:14     Размерность std::map #3
Цитата Сообщение от Ilyaa Посмотреть сообщение
Использую тип данных 16 байтовый.
Цитата Сообщение от Ilyaa Посмотреть сообщение
на 24ом миллионе программа завершает свою работу
sizeof ( type ) * 2 * 24000000 / 1048576 = 732.421875 мегабайта только на Ваши данные в узлах, не считая "служебных" данных std :: map и памяти, занимаемой всей остальной программой
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.11.2013, 00:33     Размерность std::map #4
Цитата Сообщение от Ilyaa Посмотреть сообщение
Может я не точно узнал максимальную размерность массива? Как ее узнать?
Точно никак, может просто памяти не хватить.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.11.2013, 00:55     Размерность std::map #5
Дюже интересно, шо ты там, звёзды считаешь шо ль?
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
21.11.2013, 15:30  [ТС]     Размерность std::map #6
Цитата Сообщение от stima Посмотреть сообщение
Но, а вообще без кода сложно сказать, что произодит.
В коде нет смысла. Представьте цикл for и 100 миллионов итераций)

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

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

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

Попробуй перекомпилировать в 64-битном режиме и посмотри, что получится.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
21.11.2013, 17:32     Размерность std::map #8
Цитата Сообщение от Ilyaa Посмотреть сообщение
Откуда делитель 1048576?
байты в мегабайты чтобы перевести
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
21.11.2013, 19:37  [ТС]     Размерность std::map #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
все, что ты имеешь - это чуть менее 2 Гбайт для всего-всего: кода программы, статических данных, всех подгруженных DLL, и динамических данных - вот этой самой твоей map. Так что 700 Мбайт только на твои данные, плюс служебные данные map
Сколько весят служебные данные map?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.11.2013, 21:25     Размерность std::map #10
Цитата Сообщение от Ilyaa Посмотреть сообщение
Сколько весят служебные данные map?
3 указателя на один элемент.
Т.е. 12 байт в 32-битном режиме и 24 байта в 64-битном.
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
22.11.2013, 16:35  [ТС]     Размерность std::map #11
Цитата Сообщение от diagon Посмотреть сообщение
12 байт в 32-битном режиме и 24 байта в 64-битном.
Тогда как мои 732 Мбайта забивают допустимый лимит в 2 ГБ?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.11.2013, 16:48     Размерность std::map #12
Цитата Сообщение от Ilyaa Посмотреть сообщение
Тогда как мои 732 Мбайта забивают допустимый лимит в 2 ГБ?
12 байт на один элемент, а не на весь контейнер.
Т.е. размер вашего элемента равен 16 + 12 = 28 байт, плюс возможно выравнивание до 32 байт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 23:00     Размерность std::map
Еще ссылки по теме:

C++ Stdext::hash_map и std::map
C++ Std::map и key_comp
Std::map::emplace C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
22.11.2013, 23:00     Размерность std::map #13
Цитата Сообщение от diagon Посмотреть сообщение
Т.е. размер вашего элемента равен 16 + 12 = 28 байт, плюс возможно выравнивание до 32 байт.
плюс другие данные программы
Yandex
Объявления
22.11.2013, 23:00     Размерность std::map
Ответ Создать тему
Опции темы

Текущее время: 06:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru