os/mm/global_allocator/
heap.rs

1#![allow(dead_code)]
2// 内核堆(Kernel Heap)的公共接口,提供了 C 风格的 kmalloc 家族函数。
3
4// 引入在 kalloc.rs 中实现的全局分配器
5// #[global_allocator]
6// static ALLOCATOR: ...;
7//
8// 假设全局分配器 ALLOCATOR 已经被正确设置和初始化。
9
10// -------------------------------------------------------------------
11// 用于导出到外部的 C 风格的 kmalloc 家族接口 (Wrapper Functions)
12// -------------------------------------------------------------------
13
14/// kmalloc: 内核动态内存分配函数。
15///
16/// 功能: 分配至少 `size` 字节的内存块。返回的内存是**未初始化**的。
17///
18/// # Arguments
19/// * `size`: 需要分配的字节数。
20///
21/// # Safety
22/// 这是一个不安全函数,因为分配失败可能返回空指针,且使用者必须负责调用 kfree 释放。
23///
24/// # Returns
25/// 分配内存块的指针 (*mut u8);失败则返回 ptr::null_mut()。
26#[inline]
27pub unsafe fn kmalloc(_size: usize) -> *mut u8 {
28    unimplemented!()
29}
30
31/// kcalloc: 内核动态内存分配并清零函数。
32///
33/// 功能: 分配 `count * size` 字节的内存块,并将分配的内存**清零**。
34///
35/// # Arguments
36/// * `count`: 元素数量。
37/// * `size`: 每个元素的字节数。
38///
39/// # Safety
40/// 必须负责释放。如果乘法溢出或分配失败,返回空指针。
41///
42/// # Returns
43/// 分配内存块的指针 (*mut u8);失败则返回 ptr::null_mut()。
44#[inline]
45pub unsafe fn kcalloc(_count: usize, _size: usize) -> *mut u8 {
46    unimplemented!()
47}
48
49/// kfree: 释放之前由 kmalloc/kcalloc/krealloc 分配的内存块。
50///
51/// # Arguments
52/// * `ptr`: 待释放的内存块指针。
53/// * `size`: 释放的内存块大小。
54///
55/// # Safety
56/// * `ptr` 必须是由本分配器分配的。
57/// * `ptr` 必须是非空且尚未被释放。
58/// * `size` 必须与分配时的 `size` 相同。
59#[inline]
60pub unsafe fn kfree(_ptr: *mut u8, _size: usize) {
61    unimplemented!()
62}
63
64/// krealloc: 重新调整内存块的大小。
65///
66/// 功能: 调整 `old_ptr` 指向的内存块大小为 `new_size`。
67///
68/// # Arguments
69/// * `old_ptr`: 原始内存块的指针。
70/// * `old_size`: 原始内存块的大小。
71/// * `new_size`: 新需要的大小。
72///
73/// # Safety
74/// * `old_ptr` 必须是本分配器分配的,且未释放。
75/// * `old_size` 必须与分配时的大小相同。
76///
77/// # Returns
78/// 新的内存块指针 (*mut u8);失败则返回 ptr::null_mut()。
79#[inline]
80pub unsafe fn krealloc(_old_ptr: *mut u8, _old_size: usize, _new_size: usize) -> *mut u8 {
81    unimplemented!()
82}