We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
netpoll/nocopy.go
Line 279 in 44a7f98
建议用如下函数替换UnsafeStringToSlice,经过benchmark测试,性能提高约30%左右,代码也更优雅
func UnsafeStringToSlice2(s string) []byte { return *(*[]byte)(unsafe.Pointer( &struct { string int }{s, len(s)}, )) }
### 测试详情
go test -bench . -benchmem goos: darwin goarch: arm64 pkg: gitlab-vywrajy.zd100.net/slice/service BenchmarkToSlice/UnsafeStringToSlice-8 737677520 1.542 ns/op 0 B/op 0 allocs/op BenchmarkToSlice/UnsafeStringToSlice2-8 1000000000 1.188 ns/op 0 B/op 0 allocs/op PASS ok gitlab-vywrajy.zd100.net/slice/service 2.928s
### 相关测试代码
package service import ( "reflect" "testing" "unsafe" ) func BenchmarkToSlice(b *testing.B) { a := "hello world" var bs []byte b.Run("UnsafeStringToSlice", func(b *testing.B) { for i := 0; i < b.N; i++ { bs = UnsafeStringToSlice(a) } }) b.Run("UnsafeStringToSlice2", func(b *testing.B) { for i := 0; i < b.N; i++ { bs = UnsafeStringToSlice2(a) } }) _ = bs } func UnsafeStringToSlice(s string) (b []byte) { p := unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&s)).Data) hdr := (*reflect.SliceHeader)(unsafe.Pointer(&b)) hdr.Data = uintptr(p) hdr.Cap = len(s) hdr.Len = len(s) return b } func UnsafeStringToSlice2(s string) []byte { return *(*[]byte)(unsafe.Pointer( &struct { string int }{s, len(s)}, )) }
The text was updated successfully, but these errors were encountered:
@dxasu 可以提个 PR 优化下这块,看了下,就是少了几个 MOVQ 指令
Sorry, something went wrong.
Successfully merging a pull request may close this issue.
netpoll/nocopy.go
Line 279 in 44a7f98
建议用如下函数替换UnsafeStringToSlice,经过benchmark测试,性能提高约30%左右,代码也更优雅
### 测试详情
### 相关测试代码
The text was updated successfully, but these errors were encountered: