Comments 4
В литературе по оптимизации, работа с памятью стоит не на первом месте, и даже если вы добрались до этих глав там, с большой вероятностью будут рассказывать про пропускную способность, чтобы система могла перемалывать условные пять ГБ/с вместо трех.
Ну нет же, зачем набивать себе цену желтизной типа "все книги по оптимизации СКРЫВАЮТ, вместо list, ВОЗЬМИТЕ ПРОСТОЙ СОВЕТСКИЙ VECTOR..."
Лет 15-20 как "What every programmer should know about memory" - золотой стандарт и ссылки на него включают в приличные статьи\книги по оптимизации памяти практически на обязательной основе (он частично устарел в части NUMA и отсутствия TCL".
В чуть менее приличные включают цитаты указания откуда надёргано.
Я разве сказал что Drepper не прав? Только он объясняет, как работает память и у него самый близкий к практике пример емнип блочное перемножение матриц, это однородные данные, которые целиком помещаются в память и которые надо правильно обойти. В игре задача очень часто обратная, данных много, они не влезают, они разнородные, и решать как обойти бесполезно, и приходится решать что положить рядом, упаковать или вообще выкинуть. Я об этом и это у Drepperа нет, и не потому что я набиваю цену, вот из недавнего проекта, это упакованное состояние мира

его у вас 380Мб данных, которые надо обновлять раз в несколько кадров, иначе начинает ломаться симуляция... их реально 380Мб, упаковано дальше некуда, есть пара свободных битов на обьект... а больше нету. Пожать вы их не можете, вынести что-то тоже не можете, остается всякими трюками удерживать в кеше хоть какуют-то важную часть
dalerank: про "memory optimization" не пишут в книгах оптимизации.....
wasd: про "memory optimization" пишут, см пример
dalerank: ... зато... это не объясняет как работает "memory caching"...
Ещё раз:
ваше утверждение, что про оптимизации памяти не пишут - неверно и поскольку вы хорошо знакомы с примером - так делать плохо.
То, что вы пишите как кэшировать память - хорошо.
Размер этой структры равен 376 байтам, перебор областей карты читает из неё четыре поля, то есть десять байт, а вынужден тащить в кеш все 376
с какого испуга? в кэш попадают фрагменты по размеру линии кэша. поэтому, например, куски поля History вообще в кэш никогда не попадают.
Держи хотпас в холоде, а кеш в тепле