Post Thumbnail

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

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

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

Похожее

Post Thumbnail

Soppo

Пятничный язык программирования! Я про него уже писал, но он продолжает развиват...

Post Thumbnail

Typescript Defer

Автор экспериментировал с добавлением оператора defer из Go в компилятор TypeScr...

Post Thumbnail

Raft сломан

Ребята из Antithesis(я хз кто это) протестировали несколько популярных реализаци...