gmsm
gmsm copied to clipboard
feat: optimize pkcs7Padding
把 bytes.Repeat 改成 for 循环的话效率会高一倍多,内存占用也会少一点。
package playground
import (
"bytes"
"testing"
)
func BenchmarkOld(b *testing.B) {
for i := 0; i < b.N; i++ {
src := []byte("0123456789abcdef")
src = pkcs7PaddingOld(src)
_ = src
}
}
func BenchmarkNew(b *testing.B) {
for i := 0; i < b.N; i++ {
src := []byte("0123456789abcdef")
src = pkcs7PaddingNew(src)
_ = src
}
}
const BlockSize = 16
func pkcs7PaddingOld(src []byte) []byte {
padding := BlockSize - len(src)%BlockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(src, padtext...)
}
func pkcs7PaddingNew(src []byte) []byte {
padding := BlockSize - len(src)%BlockSize
for i := 0; i < padding; i++ {
src = append(src, byte(padding))
}
return src
}
> go test -benchmem -run=^$ -bench ^(BenchmarkOld|BenchmarkNew)$ github.com/kvii/playground
goos: darwin
goarch: arm64
pkg: github.com/kvii/playground
cpu: Apple M1 Pro
BenchmarkOld-10 20169958 53.38 ns/op 48 B/op 2 allocs/op
BenchmarkNew-10 54074353 22.81 ns/op 32 B/op 1 allocs/op
PASS
ok github.com/kvii/playground 3.581s