|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.10.2014, 08:30 | #1 |
Пользователь
Регистрация: 22.10.2014
Сообщений: 12
|
Хранение мира в массиве
Добрый день! Я пишу игру аля Terraria. Уже работает генерация мира но ... Мир я храню в двумерном массиве и поскольку мир нужен большой (4800 * 2400), для массива не хватает памяти. В массиве храню единицы и нули.
Получается размер не очень большой, при попытке сделать его больше, при компиляции выдает ошибку сегментации. Можно ли как то увеличить массив? Заранее спасибо! Код:
|
22.10.2014, 08:43 | #2 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
22.10.2014, 09:07 | #3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Использовать для нулей и единиц инты.. кхм
Использовать для очень больших массивов не динамическую память... кхм Вы уверены, что весь мир вам нужен одновременно? Его нельзя нарезать на страницы? |
22.10.2014, 09:31 | #4 | |
Пользователь
Регистрация: 22.10.2014
Сообщений: 12
|
Цитата:
Мир мне нужно сгенерить и положить в файл. А потом только нужную часть в игру грузить Последний раз редактировалось egordorichev; 22.10.2014 в 09:44. |
|
22.10.2014, 09:49 | #5 |
Пользователь
Регистрация: 22.10.2014
Сообщений: 12
|
|
22.10.2014, 10:24 | #6 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
На бумажке сделайте небольшой мирок, например 5х5 квадратиков - это будет наш большой мир. Теперь закрасьте в середине 2х2 квадратика другим цветом. Теперь на нарежьте ваш мир на полоски по 5 квадратиков и выстройте их в цепочку. Раскрашенные квадратики покажут вам как они будут расположены в файле. Тогда вы поймете как из большого мира вычитать только небольшой кусочек, т.е. откуда начать читать, сколько считывать и сколько пропускать. |
|
22.10.2014, 10:52 | #7 | |
Пользователь
Регистрация: 22.10.2014
Сообщений: 12
|
Цитата:
|
|
22.10.2014, 10:57 | #8 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
22.10.2014, 11:03 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Код:
Код:
Для int. 4800 * 2400 = 11520000 интов. 1 int - это 4 байта. 11520000 * 4 байта = 46080000 = 46 МБайт. Неужели не хватает памяти для 46 МБайт? Для bool. 4800 * 2400 = 11520000 бит. 1 бит равен 1/8 байт. 11520000 / 8 = 1440000 байт= 1.4МБайт. В сравнении с предыдущим вариантом в 46 МБайт, как раз, в 32 раза x64 Для int. 1 int - это 8 байт. 11520000 * 8 байт = 92160000 = 92 МБайт. Сколько у вас памяти всего? Для bool остаётся также: 1.4 МБайт, но разница теперь составляет в 64 раза Вроде так получается. Поправьте, если ошибся Вот вам пример: Код:
Последний раз редактировалось 8Observer8; 22.10.2014 в 11:06. |
22.10.2014, 11:31 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Пользуйте std::vector, у него для bool особая реализация.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Генерация мира | 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 |