#virtual-memory #arceos #address

no-std memory_addr

Wrappers and helper functions for physical and virtual addresses

7 releases

0.3.2 Mar 7, 2025
0.3.1 Sep 14, 2024
0.3.0 Aug 27, 2024
0.2.1 Jul 28, 2024
0.1.0 May 9, 2023

#45 in Operating systems

Download history 680/week @ 2024-12-07 684/week @ 2024-12-14 770/week @ 2024-12-21 953/week @ 2024-12-28 661/week @ 2025-01-04 804/week @ 2025-01-11 488/week @ 2025-01-18 241/week @ 2025-01-25 560/week @ 2025-02-01 640/week @ 2025-02-08 711/week @ 2025-02-15 524/week @ 2025-02-22 952/week @ 2025-03-01 2185/week @ 2025-03-08 1633/week @ 2025-03-15 1736/week @ 2025-03-22

6,576 downloads per month
Used in 10 crates (7 directly)

GPL-3.0-or-later OR Apache-2…

49KB
811 lines

memory_addr

Crates.io Docs.rs CI

Wrappers and helper functions for physical and virtual memory addresses.

Examples

use memory_addr::{pa, va, va_range, PhysAddr, VirtAddr, MemoryAddr};

let phys_addr = PhysAddr::from(0x12345678);
let virt_addr = VirtAddr::from(0x87654321);

assert_eq!(phys_addr.align_down(0x1000usize), pa!(0x12345000));
assert_eq!(phys_addr.align_offset_4k(), 0x678);
assert_eq!(virt_addr.align_up_4k(), va!(0x87655000));
assert!(!virt_addr.is_aligned_4k());
assert!(va!(0xabcedf0).is_aligned(16usize));

let va_range = va_range!(0x87654000..0x87655000);
assert_eq!(va_range.start, va!(0x87654000));
assert_eq!(va_range.size(), 0x1000);
assert!(va_range.contains(virt_addr));
assert!(va_range.contains_range(va_range!(virt_addr..virt_addr + 0x100)));
assert!(!va_range.contains_range(va_range!(virt_addr..virt_addr + 0x1000)));

No runtime deps