Skip to content

Commit 04c7e32

Browse files
committed
compress/flate: remove unneeded zeroing of bytes array in (*huffmanBitWriter).reset
There is no correctness reason to zero out the w.bytes array in (w *huffmanBitWriter).reset, since w.nbytes is correctly set to zero. The elements of the bytes array are always written sequentially, with nbytes indicating how many elements have been written, and are only read up to the current value of nybytes. We have a pprof profile of a web server that compresses its request/responses, and the zeroing in reset() is taking up 2.6% of the CPU time of the server (and could be causing more slowdowns elsewhere due to its effects on the cache). This overhead may be showing up especially because there are many request/responses that are all fairly small. I'm not sure if the zeroing of the bytes array was intended as extra protection of data across reset uses in the same program, but no protection is needed as long as the huffman_bit_writer code remains correct. Change-Id: I67f2b2f56cff9dcc38d8fc0aea885bb010aeedbf Reviewed-on: https://go-review.googlesource.com/c/go/+/258577 Run-TryBot: Dan Scales <[email protected]> Run-TryBot: Joe Tsai <[email protected]> TryBot-Result: Go Bot <[email protected]> Reviewed-by: Klaus Post <[email protected]> Reviewed-by: Joe Tsai <[email protected]> Trust: Joe Tsai <[email protected]> Trust: Dan Scales <[email protected]>
1 parent bdab5df commit 04c7e32

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/compress/flate/huffman_bit_writer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ type huffmanBitWriter struct {
7575
writer io.Writer
7676

7777
// Data waiting to be written is bytes[0:nbytes]
78-
// and then the low nbits of bits.
78+
// and then the low nbits of bits. Data is always written
79+
// sequentially into the bytes array.
7980
bits uint64
8081
nbits uint
8182
bytes [bufferSize]byte
@@ -105,7 +106,6 @@ func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter {
105106
func (w *huffmanBitWriter) reset(writer io.Writer) {
106107
w.writer = writer
107108
w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil
108-
w.bytes = [bufferSize]byte{}
109109
}
110110

111111
func (w *huffmanBitWriter) flush() {

0 commit comments

Comments
 (0)