Skip to content

carllerche/bytes-pool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bytes-pool

A pre-allocated buffer pool for Rust.

Crates.io Documentation License: MIT

Overview

bytes-pool provides a fixed-size pool of pre-allocated buffers. Buffers are allocated from the pool and automatically returned when dropped. This is useful for high-performance applications where allocation overhead matters.

Features

  • Thread-safe pool access
  • Zero-allocation buffer recycling
  • Implements BufMut for ergonomic writes
  • Automatic buffer return on drop

Usage

Add this to your Cargo.toml:

[dependencies]
bytes-pool = "0.1"

Example

use bytes::BufMut;
use bytes_pool::Pool;

// Create a pool with 10 buffers of 1024 bytes each
let pool = Pool::new(1024, 10);

// Allocate a buffer
let mut buf = pool.alloc().unwrap();

// Write data using BufMut
buf.put_slice(b"hello world");

// Access the data
assert_eq!(&buf[..], b"hello world");

// Buffer is automatically returned to the pool when dropped
drop(buf);
assert_eq!(pool.available(), 10);

Pool Exhaustion

When all buffers are in use, alloc() returns an error:

use bytes_pool::Pool;

let pool = Pool::new(1024, 1);

let buf1 = pool.alloc().unwrap();
let result = pool.alloc(); // Returns Err(AllocError)

assert!(result.is_err());

Requirements

  • Buffer size must be a power of 2
  • Buffer count must be greater than 0

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A basic buffer pool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages