添加动态内存分配失败时的错误处理函数

ch4
zhangxinyu 2 years ago
parent 0e1724297a
commit c583719ad0

@ -1,4 +1,5 @@
#![feature(panic_info_message)] #![feature(panic_info_message)]
#![feature(alloc_error_handler)]
#![no_std] #![no_std]
#![no_main] #![no_main]

@ -1,3 +1,4 @@
use alloc::boxed::Box; use alloc::boxed::Box;
use alloc::vec; use alloc::vec;
use buddy_system_allocator::LockedHeap; use buddy_system_allocator::LockedHeap;
@ -9,6 +10,8 @@ use crate::println;
#[global_allocator] #[global_allocator]
static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty(); static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty();
// 内存分配失败时, 会调用此错误处理函数
// 堆的空间 // 堆的空间
static mut HEAP_SPACE: [u8; KERNEL_HEAP_SIZE] = [0; KERNEL_HEAP_SIZE]; static mut HEAP_SPACE: [u8; KERNEL_HEAP_SIZE] = [0; KERNEL_HEAP_SIZE];
@ -56,4 +59,9 @@ pub fn heap_test() {
// 通过输出打印, 发现 a 和b 均被分配在了 HEAP_SPACE 中, 且 HEAP_SPACE 被分配在了 bss段中, 这个段由我们 linker.ld 进行手动布局 // 通过输出打印, 发现 a 和b 均被分配在了 HEAP_SPACE 中, 且 HEAP_SPACE 被分配在了 bss段中, 这个段由我们 linker.ld 进行手动布局
// 目前整个bss段的大小都是3M, 说明当前bss段中只有这一个 数据 // 目前整个bss段的大小都是3M, 说明当前bss段中只有这一个 数据
} }
#[alloc_error_handler]
pub fn handle_alloc_error(layout: core::alloc::Layout) -> ! {
panic!("Heap allocation error, layout = {:?}", layout);
}

Loading…
Cancel
Save