1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-12-23 23:12:52 +02:00
Files
comprehensive-rust/src/memory-management/stack.md

36 lines
1.3 KiB
Markdown
Raw Normal View History

2022-12-21 16:36:30 +01:00
# Stack Memory
Creating a `String` puts fixed-sized data on the stack and dynamically sized
data on the heap:
```rust,editable
fn main() {
let s1 = String::from("Hello");
}
```
```bob
Stack Heap
.- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - -.
: : : :
: s1 : : :
: +-----------+-------+ : : +----+----+----+----+----+ :
: | ptr | o---+---+-----+-->| H | e | l | l | o | :
: | len | 5 | : : +----+----+----+----+----+ :
: | capacity | 5 | : : :
: +-----------+-------+ : : :
: : `- - - - - - - - - - - - - - - -'
`- - - - - - - - - - - - - -'
```
2023-01-12 11:12:53 +09:00
<details>
* Mention that a `String` is backed by a `Vec`, so it has a capacity and length and can grow if mutable via reallocation on the heap.
2023-01-12 11:51:37 +01:00
* If students ask about it, you can mention that the underlying memory is heap allocated using the [System Allocator] and custom allocators can be implemented using the [Allocator API]
2023-01-12 11:12:53 +09:00
</details>
[System Allocator]: https://doc.rust-lang.org/std/alloc/struct.System.html
2023-01-12 11:51:37 +01:00
[Allocator API]: https://doc.rust-lang.org/std/alloc/index.html