forked from GitHub/bdwgc-rust
Compare commits
12 Commits
main
...
feature/ta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56de2259dd | ||
|
|
b540c0597c | ||
|
|
10ffdd9351 | ||
|
|
0bd260a7c0 | ||
|
|
6cb47fddd0 | ||
|
|
039a10213d | ||
|
|
b204c1a6a2 | ||
|
|
44fff26f2f | ||
|
|
ef9675ab17 | ||
|
|
4bf1effc4b | ||
|
|
1aaf2fb621 | ||
|
|
25631ef919 |
@@ -5,4 +5,5 @@ members = [
|
||||
"free_by_borrow",
|
||||
"free_by_gc",
|
||||
"static_threads",
|
||||
"tagged_pointer",
|
||||
]
|
||||
|
||||
9
examples/tagged_pointer/Cargo.toml
Normal file
9
examples/tagged_pointer/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "tagged_pointer"
|
||||
version = "0.1.0"
|
||||
authors = ["Yota Toyama <raviqqe@gmail.com>"]
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[dependencies]
|
||||
bdwgc-alloc = { path = "../.." }
|
||||
27
examples/tagged_pointer/src/main.rs
Normal file
27
examples/tagged_pointer/src/main.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use bdwgc_alloc::Allocator;
|
||||
use std::alloc::{alloc, Layout};
|
||||
|
||||
const BITS: usize = usize::MAX << 48 | 0x7;
|
||||
|
||||
#[global_allocator]
|
||||
static GLOBAL_ALLOCATOR: Allocator = Allocator;
|
||||
|
||||
fn main() {
|
||||
unsafe { Allocator::initialize() }
|
||||
|
||||
loop {
|
||||
let x = allocate();
|
||||
unsafe { *x = 42 };
|
||||
let x = x as usize | BITS;
|
||||
|
||||
assert_eq!(x & BITS, BITS);
|
||||
|
||||
Allocator::force_collect();
|
||||
|
||||
assert_eq!(unsafe { *((x & !BITS) as *mut usize) }, 42);
|
||||
}
|
||||
}
|
||||
|
||||
fn allocate() -> *mut usize {
|
||||
(unsafe { alloc(Layout::from_size_align(1 << 8, 8).unwrap()) }) as *mut usize
|
||||
}
|
||||
Reference in New Issue
Block a user