Overview
| Comment: | Switched encoding/fibonacci.Encoder back to using a 2-bytes array as a preallocated write buffer. It seems that it otherwise escapes everytime and calls a causes a lot of allocations and subsequent gc work. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
90877fa64fa2a38e082a8eb74161a9a1 |
| User & Date: | spaskalev on 2015-01-11 08:44:26.153 |
| Other Links: | manifest | tags |
Context
|
2015-01-14
| ||
| 20:46 | Use for range in mtf's encoder for the position table. check-in: 3ea011cf07 user: spaskalev tags: trunk | |
|
2015-01-11
| ||
| 08:44 | Switched encoding/fibonacci.Encoder back to using a 2-bytes array as a preallocated write buffer. It seems that it otherwise escapes everytime and calls a causes a lot of allocations and subsequent gc work. check-in: 90877fa64f user: spaskalev tags: trunk | |
|
2015-01-10
| ||
| 21:28 | encoding/mtf optimizations check-in: 5c9c0a2164 user: spaskalev tags: trunk | |
Changes
Modified src/0dev.org/encoding/fibonacci/fib.go
from [32c0b16287]
to [ad0ff53aaf].
| ︙ | ︙ | |||
98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
var enc encoder
enc.target = target
return &enc
}
type encoder struct {
target io.Writer
remaining byte
length byte
}
// Implements io.Writer
func (e *encoder) Write(input []byte) (int, error) {
var (
| > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
var enc encoder
enc.target = target
return &enc
}
type encoder struct {
target io.Writer
buffer [2]byte
remaining byte
length byte
}
// Implements io.Writer
func (e *encoder) Write(input []byte) (int, error) {
var (
|
| ︙ | ︙ | |||
141 142 143 144 145 146 147 | continue } // Clearing e.length is not necessary as it will be overwritten later // Stage the complete byte for writing | | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | continue } // Clearing e.length is not necessary as it will be overwritten later // Stage the complete byte for writing buffer := e.buffer[:1] buffer[0] = byte(e.remaining) // Stage every full byte from the encoded value for writing // // The bitlength of the largest encoded byte value, 255, is 13. // Even with 7 bits already in the buffer this leaves [7+1], [8] // and 4 bits remaining => a single if is enough instead of a for. |
| ︙ | ︙ |