MemVec
Memory-backed vectors that persist beyond your program's lifetime
MemVec gives you the familiar Vec<T> interface with the power of memory-mapped storage.
✨ Why MemVec?
- 🔥 Zero-copy performance - Direct memory access, no serialization overhead
- 🎯 Drop-in Vec replacement - Familiar
push(),pop(),insert(),remove()API - 🔧 Flexible backends - File-backed storage or anonymous memory mapping
🚄 Quick Start
File-backed persistence (survive restarts!)
use ;
High-performance in-memory operations
use ;
🏗️ Architecture
MemVec is built on three key abstractions:
MemVec<T, M>- The main vector interface, generic over memory backendMMemorytrait - Pluggable storage backends (files, anonymous mapping, etc.)- Backend implementations -
VecFilefor persistence,MmapAnonfor performance
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Your Code │◄──►│ MemVec<T> │◄──►│ Memory Backend │
│ │ │ │ │ │
│ vec.push(item) │ │ • Vec-like API │ │ • VecFile │
│ vec[index] │ │ • Type safety │ │ • MmapAnon │
│ vec.iter() │ │ • Zero-copy │ │ • Custom... │
└─────────────────┘ └──────────────────┘ └─────────────────┘
🎛️ Advanced Usage
Custom memory mapping options
use ;
use MmapOptions;
// Configure memory mapping for maximum performance
let mut options = new;
options.len;
let mmap = with_options?;
let mut vec = unsafe ;
Working with existing files
use ;
// Open or create a file-backed vector
let file = open_or_create?;
let mut vec = unsafe ;
if vec.is_empty else
🛠️ Installation
Add to your Cargo.toml by running:
cargo add memvec
📜 License
Licensed under the BSD-2-Clause license.