mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 22:37:49 +00:00
Update Heap Allocation post for #763
This commit is contained in:
@@ -515,7 +515,7 @@ To use the crate, we first need to add a dependency on it in our `Cargo.toml`:
|
|||||||
# in Cargo.toml
|
# in Cargo.toml
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
linked_list_allocator = "0.6.4"
|
linked_list_allocator = "0.8.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then we can replace our dummy allocator with the allocator provided by the crate:
|
Then we can replace our dummy allocator with the allocator provided by the crate:
|
||||||
@@ -535,7 +535,7 @@ The struct is named `LockedHeap` because it uses a [`spin::Mutex`] for synchroni
|
|||||||
|
|
||||||
Setting the `LockedHeap` as global allocator is not enough. The reason is that we use the [`empty`] constructor function, which creates an allocator without any backing memory. Like our dummy allocator, it always returns an error on `alloc`. To fix this, we need to initialize the allocator after creating the heap:
|
Setting the `LockedHeap` as global allocator is not enough. The reason is that we use the [`empty`] constructor function, which creates an allocator without any backing memory. Like our dummy allocator, it always returns an error on `alloc`. To fix this, we need to initialize the allocator after creating the heap:
|
||||||
|
|
||||||
[`empty`]: https://docs.rs/linked_list_allocator/0.6.4/linked_list_allocator/struct.LockedHeap.html#method.empty
|
[`empty`]: https://docs.rs/linked_list_allocator/0.8.0/linked_list_allocator/struct.LockedHeap.html#method.empty
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// in src/allocator.rs
|
// in src/allocator.rs
|
||||||
@@ -557,9 +557,9 @@ pub fn init_heap(
|
|||||||
|
|
||||||
We use the [`LockedHeap::lock`] method to get an exclusive reference to the wrapped [`Heap`] instance, on which we then call the [`init`] method with the heap bounds as arguments. It is important that we initialize the heap _after_ mapping the heap pages, since the [`init`] function already tries to write to the heap memory.
|
We use the [`LockedHeap::lock`] method to get an exclusive reference to the wrapped [`Heap`] instance, on which we then call the [`init`] method with the heap bounds as arguments. It is important that we initialize the heap _after_ mapping the heap pages, since the [`init`] function already tries to write to the heap memory.
|
||||||
|
|
||||||
[`LockedHeap::lock`]: https://docs.rs/linked_list_allocator/0.6.4/linked_list_allocator/struct.LockedHeap.html#method.lock
|
[`LockedHeap::lock`]: https://docs.rs/linked_list_allocator/0.8.0/linked_list_allocator/struct.LockedHeap.html#method.lock
|
||||||
[`Heap`]: https://docs.rs/linked_list_allocator/0.6.4/linked_list_allocator/struct.Heap.html
|
[`Heap`]: https://docs.rs/linked_list_allocator/0.8.0/linked_list_allocator/struct.Heap.html
|
||||||
[`init`]: https://docs.rs/linked_list_allocator/0.6.4/linked_list_allocator/struct.Heap.html#method.init
|
[`init`]: https://docs.rs/linked_list_allocator/0.8.0/linked_list_allocator/struct.Heap.html#method.init
|
||||||
|
|
||||||
After initializing the heap, we can now use all allocation and collection types of the built-in [`alloc`] crate without error:
|
After initializing the heap, we can now use all allocation and collection types of the built-in [`alloc`] crate without error:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user