From f429a8ab032647ed2a285dd7a536ef224a8adcd0 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Wed, 26 Jun 2019 15:06:40 +0200 Subject: [PATCH] Example use of Box, Vec, and Rc in kernel_main --- src/main.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 69e73633..3ce0b620 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ extern crate alloc; use blog_os::println; use bootloader::{entry_point, BootInfo}; use core::panic::PanicInfo; -use alloc::boxed::Box; +use alloc::{boxed::Box, vec, vec::Vec, rc::Rc}; entry_point!(kernel_main); @@ -26,7 +26,23 @@ fn kernel_main(boot_info: &'static BootInfo) -> ! { allocator::init_heap(&mut mapper, &mut frame_allocator) .expect("heap initialization failed"); - let x = Box::new(41); + // allocate a number on the heap + let heap_value = Box::new(41); + println!("heap_value at {:p}", heap_value); + + // create a dynamically sized vector + let mut vec = Vec::new(); + for i in 0..500 { + vec.push(i); + } + println!("vec at {:p}", vec.as_slice()); + + // create a reference counted vector -> will be deallocated when count reaches 0 + let reference_counted = Rc::new(vec![1, 2, 3]); + let cloned_reference = reference_counted.clone(); + println!("current reference count is {}", Rc::strong_count(&cloned_reference)); + core::mem::drop(reference_counted); + println!("reference count is {} now", Rc::strong_count(&cloned_reference)); #[cfg(test)] test_main();