Найти в Дзене
6 подписчиков

Сегодня узнал, как оптимизировать программы на Go по использованию памяти.

В Golang при инициализации полей структуры происходит выравнивание по самому длинному типу данных в этой структуре. Это стоит учитывать при их перечислении.
Например, такая структура будет занимать 12 байт

type Foo struct {
IsGreen bool // 1 байт
Price int32 // 4 байта
CanFly bool // 1 байт
}
Это происходит из-за того, что все типы выравняются по int32, то есть оба булева поля займут по 4 байта.
Чтобы избежать излишнего использования памяти, лучше сгруппировать их следующим образом:

type Foo struct {
IsGreen bool // 1 байт
CanFly bool // 1 байт
Price int32 // 4 байта
}
Такая структура будет занимать 8 байт, так как теперь не каждая булева переменная занимает по 4 байта, а они вместе заняли 2 байта подряд, но при этом всё равно выровнялись до 4 байт.
Таким образом, небольшие правки в коде могут существенно экономить память, которую использует ваше приложение.
Около минуты