Да, это может повлиять на производительность.Как это зависит от того, что это такое и как вы его используете.
Не выровненная переменная может охватывать две строки кэша.Например, если у вас есть 64-байтовые строки кэша и вы читаете 4-байтовую переменную из массива 13-байтовых структур, существует вероятность 3 к 64 (4,6%), что она будет распределена по двум строкам.Штраф за дополнительный доступ к кешу довольно мал.Если бы все, что делала ваша программа, было рассчитано на эту одну переменную, 4,6% было бы верхней границей снижения производительности.Если регистрация составляет 20% рабочей нагрузки программы, а чтение / запись в эту структуру составляет 50% регистрации, то вы уже находитесь на небольшой доле процента.
С другой стороны, предполагая, чтожурнал должен быть сохранен, сокращение каждой записи на 3 байта экономит вам 19%, что приводит к большому объему памяти или дискового пространства.Основная память и особенно диск медленные, поэтому вам, вероятно, будет лучше упаковать журнал, чтобы уменьшить его размер.
Что касается чтения размера структуры, не беспокоясь об изменении структуры, используйте sizeof
.Как бы вы ни хотели использовать числовые константы, будь то const int
, enum
или #define
, просто добавьте sizeof
.