Post Thumbnail

Автор разбирает продвинутый прием устранения проверки границ в горячих путях Go

Когда компилятор не может доказать безопасность доступа к срезу, а программист может, на помощь приходит unsafe.Pointer с арифметикой указателей. Вместо `binary.LittleEndian.Uint32(data[i:])` можно использовать `*(*uint32)(unsafe.Add(unsafe.Pointer(unsafe.SliceData(b)), i))`, что устраняет все проверки границ и на реальном бенчмарке brotli-компрессора даёт прирост ~10%. У автора в статье довольно много таких хаков

Кроме очевидного сокращения инструкций и ветвлений в хотпасе, вы еще и работу кеша процессора улучшаете. Меньше инструкций, меньше мисов

Похожее

Post Thumbnail

mmap или pread

Автор статьи - инженер из VictoriaMetrics. На примере реального движка хранения ...