TG Telegram Group & Channel
Golang | United States America (US)
Create: Update:

📦 Как оптимизировать struct в Go: выравнивание, паддинг и порядок полей

Когда ты работаешь с Go и структурой данных (`struct`), порядок полей — это не просто эстетика. Это напрямую влияет на:
• размер занимаемой памяти
• эффективность использования кэша
• и в итоге — на производительность твоей программы.

Автор [buarki на DEV.to](https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1) показывает, как правильно выстраивать поля в структурах, чтобы избежать лишнего паддинга и сделать struct более компактным и быстрым.

🔍 Что такое padding?

Go автоматически выравнивает поля структур по их размеру. Например:


type Bad struct {
a bool // 1 байт
b int64 // 8 байт
c bool // 1 байт
}

Кажется, что struct должен занимать 10 байт. Но из-за выравнивания Go вставит паддинг, и итоговый размер окажется 24 байта.

Как это исправить?

Меняем порядок полей:

type Good struct {
b int64 // 8 байт
a bool // 1 байт
c bool // 1 байт
}

Теперь структура занимает 16 байт, а не 24 — и всё благодаря грамотному размещению полей.

📌 Рекомендации:

• Сортируй поля от самых крупных к самым мелким
• Группируй однотипные поля
• Избегай перемешивания bool`/`byte с int64`/`float64
• Используй визуализацию (например, viztruct) для анализа struct'ов
• Проверяй размер struct через unsafe.Sizeof()

🎯 Это особенно важно при:
• массовом использовании struct в массивах и слайсах
• передаче struct между потоками
• работе с бинарными протоколами или mmap

📖 Подробнее с примерами: https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1

📦 Как оптимизировать struct в Go: выравнивание, паддинг и порядок полей

Когда ты работаешь с Go и структурой данных (`struct`), порядок полей — это не просто эстетика. Это напрямую влияет на:
• размер занимаемой памяти
• эффективность использования кэша
• и в итоге — на производительность твоей программы.

Автор [buarki на DEV.to](https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1) показывает, как правильно выстраивать поля в структурах, чтобы избежать лишнего паддинга и сделать struct более компактным и быстрым.

🔍 Что такое padding?

Go автоматически выравнивает поля структур по их размеру. Например:

type Bad struct {
a bool // 1 байт
b int64 // 8 байт
c bool // 1 байт
}

Кажется, что struct должен занимать 10 байт. Но из-за выравнивания Go вставит паддинг, и итоговый размер окажется 24 байта.

Как это исправить?

Меняем порядок полей:

type Good struct {
b int64 // 8 байт
a bool // 1 байт
c bool // 1 байт
}

Теперь структура занимает 16 байт, а не 24 — и всё благодаря грамотному размещению полей.

📌 Рекомендации:

• Сортируй поля от самых крупных к самым мелким
• Группируй однотипные поля
• Избегай перемешивания bool`/`byte с int64`/`float64
• Используй визуализацию (например, viztruct) для анализа struct'ов
• Проверяй размер struct через unsafe.Sizeof()

🎯 Это особенно важно при:
• массовом использовании struct в массивах и слайсах
• передаче struct между потоками
• работе с бинарными протоколами или mmap

📖 Подробнее с примерами: https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1


>>Click here to continue<<

Golang






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)