hashmap-mem 0.2.2

Fast, low-overhead in-memory hashmap implementation optimized for performance using fxhash
Documentation
  • Coverage
  • 25%
    10 out of 40 items documented0 out of 16 items with examples
  • Size
  • Source code size: 35.7 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 454.3 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 8s Average build duration of successful builds.
  • all releases: 11s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • piot

🪣 hashmap-mem

A memory-efficient hashmap implementation designed for Virtual Machine implementations (specifically the Swamp VM) and similar low-level use cases.

What is this?

hashmap-mem is a specialized hashmap implementation designed primarily for use in Virtual Machine implementations, particularly the Swamp VM environment, following the Swamp VM collection standard.

This is not a general-purpose hashmap with all the safety guarantees you'd expect from a standard Rust collection. Instead, it's a memory-optimized implementation. For a more "normal" hashmap implementation with the rust security guarantees, please checkout my seq-map crate:

👉 📦 seq-map (github)

Features

  • Fast lookups: Uses FxHasher64 for efficient hashing
  • Tombstone-based deletion: Quick removal of entries without costly rehashing
  • Can not, by design, be resized

Safety

This crate uses unsafe code extensively and expects you to manage memory correctly.

  • Memory must be properly allocated and aligned and deallocated after use.
  • The map must be properly initialized before use
  • Key and value pointers must be valid

Memory Layout

The hashmap consists of a header followed by buckets:

+-------------+
| MapHeader   |
+-------------+
| Bucket 0    |
| Bucket 1    |
| ...         |
| Bucket N-1  |
+-------------+

Each bucket has:

  • A status byte (Empty, Tombstone, or Occupied)
  • Key data (properly aligned)
  • Value data (properly aligned)

API Overview

  • layout: Calculate memory layout for the map
  • init: Initialize a new map in pre-allocated memory
  • get_or_reserve_entry: Find or create an entry for a key
  • lookup: Find an existing entry
  • has: Check if a key exists
  • remove: Remove an entry
  • overwrite: Copy all entries from one map to another
  • find_next_valid_entry: Iterator-like functionality

License

This is my personal open source project. While you can use the code under the LICENSE, I'm not accepting pull requests at this time.

Feel free to:

  • Use and fork the code
  • Report issues
  • Share feedback
  • Spread the word

If you have ideas or find bugs, open an issue and I'll check it out. Though I can't merge external code right now, your input is always appreciated!

Thanks for understanding! 🙏


Copyright (c) 2025 Peter Bjorklund. All rights reserved