Полный текст

Выравнивание данных съедает до 60% объёма памятиОбычная структура C++ на 40 байт кажется безобидной, пока не инстанцируется миллион раз. Всё упирается в padding-отступы, из-за которых массивы пухнут на десятки мегабайт.Базовая перестановка полей от большего к меньшему сразу убирает лишние «дыры». Настоящий хардкор начинается при упаковке булевых флагов в маски и растворении enum в нулевых младших битах указателя.Без изменения логики размер объекта сжимается с 40 до 16 байт. Ещё помогают union и квантизация float. Изучим методы экстремального сжатия.