From 90dcc1cd30e26c86bbb1cac6544390c6398a83ed Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sat, 9 Dec 2023 01:17:19 +0800 Subject: [PATCH] Do not always zero initialize for rust resize vec --- native/src/base/include/stream.hpp | 2 +- native/src/base/lib.rs | 7 ++++++- native/src/base/stream.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/native/src/base/include/stream.hpp b/native/src/base/include/stream.hpp index 09b34f3c6..5cb5a1deb 100644 --- a/native/src/base/include/stream.hpp +++ b/native/src/base/include/stream.hpp @@ -90,7 +90,7 @@ private: rust::Vec &_data; size_t _pos = 0; - void ensure_size(size_t sz); + void ensure_size(size_t sz, bool zero = false); }; class file_channel : public channel { diff --git a/native/src/base/lib.rs b/native/src/base/lib.rs index e05dc3f5e..286905ac8 100644 --- a/native/src/base/lib.rs +++ b/native/src/base/lib.rs @@ -66,5 +66,10 @@ fn set_log_level_state_cxx(level: ffi::LogLevelCxx, enabled: bool) { } fn resize_vec(vec: &mut Vec, size: usize) { - vec.resize(size, 0); + if size > vec.len() { + vec.reserve(size - vec.len()); + } + unsafe { + vec.set_len(size); + } } diff --git a/native/src/base/stream.cpp b/native/src/base/stream.cpp index 3628b14e0..8bebf2eaf 100644 --- a/native/src/base/stream.cpp +++ b/native/src/base/stream.cpp @@ -209,15 +209,17 @@ off_t rust_vec_channel::seek(off_t off, int whence) { default: return -1; } - ensure_size(np); + ensure_size(np, true); _pos = np; return np; } -void rust_vec_channel::ensure_size(size_t sz) { +void rust_vec_channel::ensure_size(size_t sz, bool zero) { size_t old_sz = _data.size(); if (sz > old_sz) { resize_vec(_data, sz); + if (zero) + memset(_data.data() + old_sz, 0, sz - old_sz); } }