perf(c++): optimize primitive struct fields read performance #2960
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.
Why?
What does this PR do?
- Compute field offsets at compile time with compute_fixed_field_offset<T, I>()
- Read all fixed fields at absolute offsets without per-field reader_index updates
- Single reader_index update after all fixed fields
- Track offset locally during batch reading
- Removed overly conservative max-varint-bytes pre-check (varints are variable-length)
- Single reader_index update after all varints
- Phase 1: Batch read leading fixed-size primitives
- Phase 2: Batch read consecutive varint primitives
- Phase 3: Read remaining fields normally
Related issues
#2958
#2906
Does this PR introduce any user-facing change?
Benchmark