Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I noticed that it's not necessary to pin a string if it's being used explicitly during a CGO function call (see also this discussion in the google forums.
zend_string_init will always copy the underlying string anyways so removing pinning for most globals is safe.
In the flamegraphs you can see that
Pinner.Pin
andPinner.Unpin
currently consume around 7% of the CPU profile for the optimized 'Hello World'. Without Pinning most of that time is gone.With Pinner
Without Pinner
The only way to optimize this even more would be by directly using the allocated go string as a zend_string (not sure if this is currently possible)