forked from GitHub/bdwgc-rust
52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
# bdwgc-rust
|
|
|
|
[](https://github.com/bdwgc/bdwgc-rust/actions)
|
|
[](https://crates.io/crates/bdwgc-alloc)
|
|
[](https://github.com/bdwgc/bdwgc-rust/blob/main/LICENSE)
|
|
|
|
[`GlobalAlloc`](https://doc.rust-lang.org/std/alloc/trait.GlobalAlloc.html) implementation for [`bdwgc`][bdwgc], the conservative garbage collector.
|
|
|
|
This crate is for use cases in which developers need to integrate [`bdwgc`][bdwgc] into their programs written in Rust (e.g. writing a runtime library in Rust for their own programming language whose GC is done by [`bdwgc`][bdwgc].)
|
|
|
|
The raw bindings to the C API of [`bdwgc`][bdwgc] that this crate is built on are available as the `bdwgc-alloc-sys` crate.
|
|
|
|
## Usage
|
|
|
|
```rust
|
|
use bdwgc_alloc::Allocator;
|
|
use std::thread::spawn;
|
|
|
|
#[global_allocator]
|
|
static GLOBAL_ALLOCATOR: Allocator = Allocator;
|
|
|
|
fn main() {
|
|
unsafe { Allocator::initialize() }
|
|
|
|
// Unreachable objects are collected automatically.
|
|
Box::leak(Box::new([0u8; 256]));
|
|
|
|
// Threads other than a main thread must be registered to a collector before allocation.
|
|
spawn(|| {
|
|
unsafe { Allocator::register_current_thread() }.unwrap();
|
|
|
|
Box::leak(Box::new([0u8; 256]));
|
|
|
|
unsafe { Allocator::unregister_current_thread() }
|
|
})
|
|
.join()
|
|
.unwrap();
|
|
}
|
|
```
|
|
|
|
By default [`bdwgc`][bdwgc] is built with autotools. To build with cmake, enable the `cmake` feature:
|
|
|
|
```sh
|
|
cargo build --no-default-features --features cmake
|
|
```
|
|
|
|
## License
|
|
|
|
[MIT](https://github.com/bdwgc/bdwgc-rust/blob/main/LICENSE)
|
|
|
|
[bdwgc]: https://github.com/bdwgc/bdwgc
|