diff --git a/cpp/nd/string_array_holder.hpp b/cpp/nd/string_array_holder.hpp index 92ede7a91f..d1b1c20bfd 100644 --- a/cpp/nd/string_array_holder.hpp +++ b/cpp/nd/string_array_holder.hpp @@ -29,12 +29,19 @@ class string_stream_array_holder std::vector offsets_; std::vector range_offsets_; std::vector holders_; + + // Zero-copy buffer cache: raw pointers to buffer data and offsets. + // SAFETY: These pointers remain valid as long as holders_ contains the chunk arrays. + // This eliminates shared_ptr atomic reference counting in get_range_data() hot path. + std::vector buffer_cache_; + std::vector offsets_cache_; + const void* dynamic_std_holder_ = nullptr; const void* dynamic_icm_holder_ = nullptr; bool is_valid_ = true; void initialize(const nd::array& arr); - void initialize_single_range(const auto& range_adapter); + void initialize_single_range(const auto& range_adapter, const nd::array& source_arr); void initialize_complex(const nd::array& arr); bool try_initialize_range_arrays(const auto& vstacked, const nd::array& fallback); void clear_range_data();