2021-03-31 19:36:16
Бессмысленная оптимизация
У начинающих разработчиков есть несколько популярных "методов оптимизации" кода, которые со стороны кажутся весьма здравыми, но на деле, в лучшем случае, будут иметь нулевой эффект, а порой ещё и просадку дадут.
Самое популярное — использовать типы данных нетрадиционных размеров, чтобы ни один битик не стоял без дела. Зачем в цикле
for использовать
int, если у меня всего 10 итераций:
for (char i = 0; i < 10; i++)
Вот так то лучше! Целых 3 байта выиграл, а то и все 7. Но еще лучше вот так:
uint8_t. Чтобы точно видно было — память у меня под контролем.
В действительности же, под капотом все эти типы данных могут оказаться 8-байтными, и даже
char, и даже
bool. Просто потому что компилятор решит, что так для твоей платформы будет лучше и производительнее и он всегда будет прав. А структура, которая занимала в памяти 64 байта, после добавления в нее однобайтного поля, может вырасти в размере до 128 байт. В спецификации есть такая штука, как integral promotion, которая описывает такое поведение.
Это так устроено потому, что не все процессоры умеют работать с памятью, когда там друг за другом находятся поля разных размеров. Поэтому все поля выравниваются так, чтобы адрес каждого был кратен какому-то числу (в зависимости от платформы 4, 8, 16, ..). А те процессоры, которые все же умеют так, делают это с оверхэдом, так что сомнительный выигрыш в памяти затмится проигрышем в производительности.
Короче, используем везде
int и не выёбываемся, господа и дамы. Об остальных типах поговорим, когда в этом реальный смысл появится :)
625 views16:36