6个版本

使用旧Rust 2015

0.3.1 2018年2月1日
0.3.0 2018年2月1日
0.2.0 2016年11月3日
0.1.2 2016年9月15日

#63 in #safety

MIT 许可证

20KB
309

状态更新

由于rust缺少功能,进度受阻。

  • 常量泛型:在没有它的帮助下,无法指定PoolSmallBuffer的缓冲区大小。目前已设置默认值,但可能不适合每个用途。

nightly需求

需要nightly,因为以下功能

  • #![feature(allocator_api)]:为Pool分配自定义对齐方式

VeryFast

VeryFast是一组对游戏开发者非常有用的工具,但也适用于关注性能的任何人。它们专注于速度和多线程安全性。

目前它提供了一个有用的类 - Pool,它像Box一样在堆上分配对象,但批量分配并重用内存而不是在丢弃时释放!它与Arena类似,但允许释放。

文档

工具

Pool

Pool以批量方式在堆上分配对象。所有对象都必须是同一类型,就像在Vec中一样。它允许快速的多线程并行分配对象。当对象被丢弃时,它们的内存会返回到池中,以便在未来分配中重用。只有当所有对象和Pool都被丢弃时,才会释放内存。

有一些针对速度的优化:它可以在单独的CPU缓存行上分配每个对象(有助于多线程访问相邻元素)。除了在分配新批次时,分配使用无锁策略。释放也使用无锁策略。

Pool类似于各种Arena实现,但它允许释放元素和重用内存。

SmallBuffer

具有扩展能力的内联分配的小缓冲区。可以异步推送值。读取值需要独占访问。只能通过耗尽整个缓冲区来删除值。

SmallBuffer 作为少量使用的元素的缓冲区非常有用。它具有较小的在线容量,因此几条消息不会导致它分配内存。如果它接收到的数据超过其存储能力,它将分配额外的内存来处理。它不会释放任何内存,因为在某些情况下,如果一个元素曾经被大量使用,它继续高使用的可能性更高。

依赖项

~15KB