From 132aa41ac03e9cb7218c4cdca475ac84d11615cb Mon Sep 17 00:00:00 2001 From: sewer56 Date: Tue, 26 Dec 2023 08:58:13 +0000 Subject: [PATCH] Improved: Align buffers on position rather than base pointer (resolving additional edge cases) --- src-rust/Cargo.lock | 2 +- src-rust/Cargo.toml | 2 +- src-rust/src/buffers.rs | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src-rust/Cargo.lock b/src-rust/Cargo.lock index 37fe66d..656bc37 100644 --- a/src-rust/Cargo.lock +++ b/src-rust/Cargo.lock @@ -992,7 +992,7 @@ checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698" [[package]] name = "reloaded-memory-buffers" -version = "4.0.2" +version = "4.0.3" dependencies = [ "clf", "criterion", diff --git a/src-rust/Cargo.toml b/src-rust/Cargo.toml index a183392..f9636ba 100644 --- a/src-rust/Cargo.toml +++ b/src-rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "reloaded-memory-buffers" -version = "4.0.2" +version = "4.0.3" edition = "2021" authors = [ "sewer56" ] description = "Shared, Concurrent, Permanent Memory Allocator tied to Process Lifetime" diff --git a/src-rust/src/buffers.rs b/src-rust/src/buffers.rs index 4ec199c..a8f823c 100644 --- a/src-rust/src/buffers.rs +++ b/src-rust/src/buffers.rs @@ -72,16 +72,23 @@ impl Buffers { settings: &BufferSearchSettings, alignment: u32, ) -> Result { - // Add expected size. + let max_misalignment = alignment.saturating_sub(1); + + // Adjust the size to include potential extra space for alignment. let mut new_settings = *settings; - new_settings.size += alignment.saturating_sub(1); + new_settings.size += max_misalignment; let result = Self::get_buffer(&new_settings)?; unsafe { let locator_item = result.item.get(); - let base_address = (*locator_item).base_address.value; - let aligned_address = round_up(base_address, alignment as usize); - (*locator_item).base_address.value = aligned_address; + let address = (*locator_item).base_address.value + (*locator_item).position as usize; + + // Use the round_up function to efficiently align the address. + let aligned_address = round_up(address, alignment as usize); + let delta = aligned_address - address; + + // Adjust the position in the buffer accordingly. + (*locator_item).position += delta as u32; Ok(result) } }