Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::rc::Rc;
- use std::slice;
- use std::mem;
- /*
- struct Rc {
- ptr: struct NonNull {
- pointer: struct RcBox<T: ?Sized> {
- strong: struct Cell {
- value: struct UnsafeCell {
- value: usize
- }
- },
- weak: struct Cell {
- value: struct UnsafeCell {
- value: usize
- }
- },
- value: T,
- },
- }
- phantom: PhantomData<T>,
- }
- */
- fn main() {
- let mut rc = Rc::new(5u32);
- let mut info = unsafe {
- slice::from_raw_parts_mut(&mut rc as *mut _ as *mut u8, mem::size_of::<Rc<u32>>())
- };
- unsafe {
- let base_ptr = info.as_mut_ptr() as *mut *mut ([usize; 2], u32);
- println!("{:?}", **base_ptr);
- (**base_ptr).0[0] = std::usize::MAX; // strong count
- (**base_ptr).0[1] = std::usize::MAX; // weak count
- println!("{:?}", **base_ptr);
- }
- let c = rc.clone();
- println!("{:?}", info);
- }
Add Comment
Please, Sign In to add comment