Многие Go программисты знакомы с bytes.Buffer. Одно из его преимуществ состоит в том, что он позволяет избегать выделений памяти в куче по той же схеме, что и "оптимизация коротких строк" (small buffer/size optimization):
type Buffer struct {
bootstrap [64]byte // для избежания аллокации малых слайсов в куче
// ... другие поля
}
Есть только одна проблема. Эта оптимизация не работает.
К концу этой статьи вы узнаете, почему эта оптимизация не работает и что мы можем с этим сделать.