From 55db1750abdf3a968a7a3a08130e0878ba8939d5 Mon Sep 17 00:00:00 2001 From: doujiang24 Date: Sat, 26 Aug 2023 04:49:53 +0000 Subject: [PATCH] cmd/cgo/internal/test: benchmark for #cgo noescape directive case: passing a single Go string object to C function. result: 87 ns vs 61 ns. BenchmarkCgoCall/string-pointer-escape BenchmarkCgoCall/string-pointer-escape-12 67731663 87.02 ns/op BenchmarkCgoCall/string-pointer-noescape BenchmarkCgoCall/string-pointer-noescape-12 99424776 61.30 ns/op For #56378 Change-Id: Iff5c69d8deedfa248f5d7399e1921a5cb0dc8b16 GitHub-Last-Rev: fc67d5ad7a1ba56025f2c142bb88cc4174fa3a27 GitHub-Pull-Request: golang/go#62297 Reviewed-on: https://go-review.googlesource.com/c/go/+/522939 TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Reviewed-by: Bryan Mills --- src/cmd/cgo/internal/test/test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/cmd/cgo/internal/test/test.go b/src/cmd/cgo/internal/test/test.go index 7da5a856b3..9a6c6d82ce 100644 --- a/src/cmd/cgo/internal/test/test.go +++ b/src/cmd/cgo/internal/test/test.go @@ -115,6 +115,13 @@ int add(int x, int y) { return x+y; }; +// escape vs noescape + +#cgo noescape handleGoStringPointerNoescape +void handleGoStringPointerNoescape(void *s) {} + +void handleGoStringPointerEscape(void *s) {} + // Following mimics vulkan complex definitions for benchmarking cgocheck overhead. typedef uint32_t VkFlags; @@ -1106,6 +1113,18 @@ func benchCgoCall(b *testing.B) { C.handleComplexPointer(&a0) } }) + b.Run("string-pointer-escape", func(b *testing.B) { + for i := 0; i < b.N; i++ { + var s string + C.handleGoStringPointerEscape(unsafe.Pointer(&s)) + } + }) + b.Run("string-pointer-noescape", func(b *testing.B) { + for i := 0; i < b.N; i++ { + var s string + C.handleGoStringPointerNoescape(unsafe.Pointer(&s)) + } + }) b.Run("eight-pointers", func(b *testing.B) { var a0, a1, a2, a3, a4, a5, a6, a7 C.VkDeviceCreateInfo for i := 0; i < b.N; i++ { -- 2.50.0