diff --git a/src/common/sparse_large_vector.h b/src/common/sparse_large_vector.h index f9fecddaa7..0bf1b3d133 100644 --- a/src/common/sparse_large_vector.h +++ b/src/common/sparse_large_vector.h @@ -107,13 +107,13 @@ public: } void ZeroRegion(std::size_t start, std::size_t end_) noexcept { - u64 base = static_cast(start) * sizeof(T); - const u64 end = static_cast(end_) * sizeof(T); + u64 base = reinterpret_cast(base_ptr[start]); + const u64 end = reinterpret_cast(base_ptr[end_]); const u64 end_page = AlignUp(base, HostPageSize); const u64 first_size = (std::min)(end_page, end) - base; - if (IsCommittedPage(base / sizeof(T))) { + if (IsCommittedPage(start / sizeof(T))) { std::memset(reinterpret_cast(base), 0, first_size); } @@ -123,7 +123,7 @@ public: base = end_page; for (u64 page = base; page < end; page += HostPageSize) { - if (!IsCommittedPage(page / sizeof(T))) { + if (!IsCommittedPage((page - reinterpret_cast(base_ptr)) / sizeof(T))) { continue; }