forked from GitHub/bdwgc-rust
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 56de2259dd | |||
| e6e76b629b | |||
| b540c0597c | |||
| 10ffdd9351 | |||
| 0bd260a7c0 | |||
| 6cb47fddd0 | |||
| 039a10213d | |||
| b204c1a6a2 | |||
| 44fff26f2f | |||
| ef9675ab17 | |||
| 4bf1effc4b | |||
| 1aaf2fb621 | |||
| 25631ef919 |
@@ -3,6 +3,7 @@
|
||||
"autogen",
|
||||
"autotools",
|
||||
"bdwgc",
|
||||
"canonicalize",
|
||||
"cflag",
|
||||
"dealloc",
|
||||
"finalizer",
|
||||
|
||||
@@ -23,6 +23,7 @@ fn main() {
|
||||
|
||||
let dst = autotools::Config::new(LIB_GC_DIR)
|
||||
.cflag(format!(
|
||||
// spell-checker: disable-next-line
|
||||
"-I{} -L/lib/x86_64-linux-gnu -lpthread -fPIC",
|
||||
dst.join("include").display()
|
||||
))
|
||||
|
||||
@@ -5,4 +5,5 @@ members = [
|
||||
"free_by_borrow",
|
||||
"free_by_gc",
|
||||
"static_threads",
|
||||
"tagged_pointer",
|
||||
]
|
||||
|
||||
@@ -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 = "../.." }
|
||||
@@ -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