| Crates.io | memory_addr |
| lib.rs | memory_addr |
| version | 0.4.0 |
| created_at | 2023-05-09 15:53:38.463093+00 |
| updated_at | 2025-06-12 06:59:49.765392+00 |
| description | Wrappers and helper functions for physical and virtual addresses |
| homepage | https://github.com/arceos-org/arceos |
| repository | https://github.com/arceos-org/axmm_crates |
| max_upload_size | |
| id | 860647 |
| size | 49,016 |
Wrappers and helper functions for physical and virtual memory addresses.
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)));