// Задача 2: Какой из вариантов более оптимальный?

На обычной 64-битной Go-платформе some1 и some3 занимают по 24 байта, some2 — 32 из-за padding. Поэтому по размеру первые два варианта равнозначны и компактнее some2.

Короткий ответ

Что ответить на собеседовании

На обычной 64-битной Go-платформе some1 и some3 занимают по 24 байта, some2 — 32 из-за padding. Поэтому по размеру первые два варианта равнозначны и компактнее some2.

Подробный разбор

Ответ с пояснениями

Условие

// Задача 2: Какой из вариантов более оптимальный? type some1 struct{ b int32 a bool c string } type some2 struct{ b int32 c string a bool } type some3 struct{ a bool b int32 c string } // Ваш ответ:

Ответ

На обычной 64-битной Go-платформе some1 и some3 занимают по 24 байта, some2 — 32 из-за padding. Поэтому по размеру первые два варианта равнозначны и компактнее some2.

При выравнивании string на 8 байт его заголовок занимает 16 байт. В some1 bool располагается после int32, затем идёт padding до string. В some3 padding находится между bool и int32. В some2 появляется отступ перед string и хвостовое выравнивание после bool.

Проверьте целевую платформу через unsafe.Sizeof и unsafe.Offsetof. Размер структуры не включает байты содержимого строки. Меньший размер может помочь массивам и кешу, но общую производительность всё равно измеряют в контексте использования.

Источник: pkg.go.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее