Что такое padding/alignment в структурах?

Middle+
1.7k просмотров
AFK Offer AI

Процессор читает память по выровненным адресам: int64 должен лежать на адресе, кратном 8. Компилятор добавляет padding (пустые байты) между полями для выравнивания. Порядок полей влияет на размер структуры:

// 24 байта (с padding)
type Bad struct {
    a bool   // 1 + 7 padding
    b int64  // 8
    c bool   // 1 + 7 padding
}

// 16 байт (без лишнего padding) type Good struct { b int64 // 8 a bool // 1 c bool // 1 + 6 padding }

Правило: сортируй поля от большего к меньшему. Инструмент fieldalignment из go vet подскажет оптимальный порядок.

Следующий вопрос

Как работает json.Marshal/Unmarshal?