Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (456 стр)

Страницы: 1455 456 457 458562 Следующая »
#6825
9:23, 24 авг 2022

FlyOfFly
А фиг знает

memset(tiles, 0, SizeMapZ * SizeMap* SizeMap * sizeof(Tile));

крашится в этом месте

#6826
(Правка: 9:45) 9:44, 24 авг 2022

war_zes
А тупо пустая инициализация не работает?

 tiles[SizeMapZ][SizeMap][SizeMap] = { };
  
#6827
9:45, 24 авг 2022

war_zes
> sizeof(Tile)
sizeof(Tile*) должно быть,  судя по объявлению массива.

#6828
10:08, 24 авг 2022

FlyOfFly
> А тупо пустая инициализация не работает?
Там массив сильно большой - студия не осиливает (время компиляции долгое, а если еще добавить - то ошибка кучи в студии)

#6829
13:49, 24 авг 2022

0xBADCODE
> Мне приходилось заводить отдельную переменную для учета реально хранящегося в
> std::array числа элементов, хотя до знакомства с ним я полагал, что можно будет
> просто воспользоваться push_back() и size().
совет: начни учить язык или не пиши подобный бред больше.
war_zes
> Не работает - какой-то элемент не обнуляется (вылетает по 0xFFFFFFF - что в
> дебаге как признак что элемент не занулен)
и смысл тебе массив указателей, потом будешь под каждый выделять отдельно память? У тебя от Tile что-то наследуется? Или ты собираешься их как-то сортировать, перемещать? Если нет, выделяй сразу одним куском. Что касается обнуления:

memset(tiles, 0, sizeof(Tile*) * SizeMapZ * SizeMap* SizeMap);
#6830
17:41, 24 авг 2022

Aroch
> и смысл тебе массив указателей
Чтобы в памяти занимало 20мб, а не 5гб))) (а это реальные числа, игрался тут с массивами - реально по 4-5 гб на тайлмапу улетало)

Больинство тайлов идентичны - 10500 тайлов стены - это все тот же блок с той же текстурой и теми же свойствами, так зачем делать 10500 копий, если можно один тайл стены, и 10500 указателей на него?

#6831
(Правка: 18:02) 18:00, 24 авг 2022

war_zes
> Чтобы в памяти занимало 20мб, а не 5гб)))
значит ты делаешь что-то не так.
> это все тот же блок с той же текстурой и теми же свойствами, так зачем делать
> 10500 копий
если у тебя тайлы хранят текстуру включая ее данные то ты делаешь что-то не так.

В общем и целом у тебя тайлы должны хранить набор ссылок/айдишников и какие-то специфичные им данные: цвет, всевозможные флаги и т.д. Набор же ссылок включают в себя ссылки на текстуру, события и может что-нибудь еще. Сами же текстуры и события храняться отдельно, тайлы лишь ссылаются на них. Размер такого тайла будет считанные байты, максимум доберется до килобайта если там совсем в жир уйти.

#6832
18:01, 24 авг 2022

почему бы вместо memset не использовать std::fill?

#6833
18:19, 24 авг 2022

CapSopener
> std::fill
std лучше не подключать в проект, даже ради std::move

#6834
(Правка: 19:07) 18:24, 24 авг 2022

CapSopener
> почему бы вместо memset не использовать std::fill?
std::fill для присвоения значения диапазону элементов, не для инициализации памяти.
memset специально оптимизирована для быстрой инициализации памяти.
Сравнительный тест: https://godbolt.org/z/fj3hr6MG9

#6835
19:26, 24 авг 2022

totoro
а если с -O3? Да и не вектор в исходной задаче, а массив.

Цель - присвоить элементам массива конкретное значение, std::fill делает это независимо от типа и значения.
Понятное дело, нормальный программист и с помощью memset справился бы, но war_zes-у std::fill сэкономил бы время на отладку и избавил от унизительных вопросов на форуме.

#6836
20:26, 24 авг 2022

  Разреженные структуры данных еще не предлагали?

#6837
20:42, 24 авг 2022
memset(tiles, 0, sizeof(tiles));
#6838
21:42, 24 авг 2022

war_zes
> Там массив сильно большой
Тебе не кажется, что ты что-то неправильно делаешь а?

#6839
(Правка: 21:44) 21:44, 24 авг 2022

#!
> std лучше не подключать в проект, даже ради std::move
Еретические мысли лучше рассказывай на своей работе в своей секте. А здесь просили нормальное решение.

Страницы: 1455 456 457 458562 Следующая »
ФлеймФорумПрограммирование