Классный и интересный материал! Подскажите, где можно почитать про машинное слово и работу процессоров с памятью для более глубокого понимания этого материала?
Интересный момент. Начинал свою карьеру с высокоуровневого языка, поэтому не интересовался такими моментами по оптимизации\работы с памятью. Сейчас, когда начинают назревать задачи где надо встраивать сервисы с высокой производительностью, возникают проблемы) Было бы еще интересно послушать про DTO и репозитории (PHP). Заметил что многие не до недооценивают эти подходы
А как вы думаете, стоит ли вручную упорядочивать поля в структурах для оптимизации? я сам недавно выбирал курсы по IT, рассматривал разные варианты, но Skypro помогли найти первый заказ))
выравнивание не зависит только от архитектуры процессора. в go выравнивание для всех типов полей структуры будет работать, как выравнивания для самого большого типа данных в структуре. у вас это int32, его выравнивание 4. и для всех последующих полей оно будет 4. поэтому, сначала int32 - 4 байта, потом 4 bool - 4 байта и еще один bool в 4 байта, получаем 12. если замените int32 на int16, то выравнивание станет 2, тогда int16 - 2 байта, 2 bool - 2 байта, еще 2 bool - 2 байта, и еще один bool - 2 байта, получим 8.
Очень крутая и полезная информация. А главное объяснение максимально понятное и доходчивое!
Классный и интересный материал!
Подскажите, где можно почитать про машинное слово и работу процессоров с памятью для более глубокого понимания этого материала?
Интересный момент. Начинал свою карьеру с высокоуровневого языка, поэтому не интересовался такими моментами по оптимизации\работы с памятью. Сейчас, когда начинают назревать задачи где надо встраивать сервисы с высокой производительностью, возникают проблемы)
Было бы еще интересно послушать про DTO и репозитории (PHP). Заметил что многие не до недооценивают эти подходы
Спасибо большое за очень доходчивое объяснение данной особенности языка!
Отличное объяснение! Спасибо!
А как вы думаете, стоит ли вручную упорядочивать поля в структурах для оптимизации? я сам недавно выбирал курсы по IT, рассматривал разные варианты, но Skypro помогли найти первый заказ))
Ну и кринж
Скорее всего, надо располагать по убыванию поля
передайте через указатель и будет по 8 байт каждая)
Почему размер переменной следующой структуры 12b?
type A struct {
value int32
is1 bool
is2 bool
is3 bool
is4 bool
is5 bool
}
У тебя наверно выравнивание 4б а не 8
выравнивание не зависит только от архитектуры процессора. в go выравнивание для всех типов полей структуры будет работать, как выравнивания для самого большого типа данных в структуре.
у вас это int32, его выравнивание 4. и для всех последующих полей оно будет 4. поэтому, сначала int32 - 4 байта, потом 4 bool - 4 байта и еще один bool в 4 байта, получаем 12.
если замените int32 на int16, то выравнивание станет 2, тогда int16 - 2 байта, 2 bool - 2 байта, еще 2 bool - 2 байта, и еще один bool - 2 байта, получим 8.
@@alexandertsapkov491 спасибо за пояснение