2.6Kпросмотров
72.3%от подписчиков
27 января 2026 г.
questionScore: 2.9K
🏗 Тетрис в памяти: Почему порядок полей в классе важен? Вы создали простую структуру: bool, int и еще один bool.
Математика проста: 1 байт + 4 байта + 1 байт = 6 байт. Вы проверяете через sizeof и видите... 12 байт. 🤯
Куда делись еще 6 байт? Вы только что потеряли 50% памяти на "воздух". Это называется Padding (Выравнивание). ⚙️ Как это работает?
Процессор не любит читать данные по произвольным адресам. Ему удобно читать кусками по 4 или 8 байт (слова). Чтобы int (4 байта) не "разломился" посередине двух слов, компилятор вставляет пустые байты-заглушки. ❌ Плохой пример (Bad Layout): struct Bad { bool a; // 1 байт // ... 3 байта PADDING (воздух) ... int b; // 4 байта (должен начинаться с кратного 4 адреса) bool c; // 1 байт // ... 3 байта PADDING (чтобы выровнять общий размер) ...
};
// Итог: 12 байт ✅ Хороший пример (Good Layout): Просто меняем порядок полей. Правило: "От больших к маленьким". struct Good { int b; // 4 байта bool a; // 1 байт bool c; // 1 байт // ... 2 байта PADDING (добиваем до кратности 4) ...
};
// Итог: 8 байт 📉 Почему это важно?
Кажется, что 4 байта ерунда. Но если у вас std::vector<Bad> на 1,000,000 элементов: ⚫️Bad: ~12 MB памяти.
⚫️Good: ~8 MB памяти. Вы экономите 4 мегабайта просто переставив строчки местами! Плюс, более плотные данные лучше ложатся в кэш процессора (CPU Cache), что ускоряет обработку. 💡 Совет:
Объявляйте поля в порядке убывания их размера: 1. Указатели и double (8 байт)
2. int, float (4 байта)
3. short (2 байта)
4. bool, char (1 байт) #cpp #optimization #memory #alignment #coding #tips ➡️ @cpp_geek