1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-04-22 15:57:46 +02:00

Clarify the Box layout diagrams. (#374)

This commit is contained in:
gendx 2023-02-14 19:03:46 +00:00 committed by GitHub
parent 302c93e3fd
commit 8dd5a78626
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 22 deletions

View File

@ -18,14 +18,15 @@ allows the compiler to optimize the memory layout:
```bob
Stack Heap
.- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.
: : : :
: list : : :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: | 0 | 1 | : : .->| 0 | 2 | .->| ////// | //// | :
: | "1/Tag"| o-----+----+-----+-' | "1/Tag"| o-----+-' | "1/Tag"| null | :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: : : :
: : : :
`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'
.- - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - -.
: : : :
: list : : :
: +----+----------+ : : +----+----------+ +----+----------+ :
: | .0 | ".1/Tag" | : : | .0 | ".1/Tag" | | .0 | ".1/Tag" | :
: +----+----------+ : : +----+----------+ +----+----------+ :
: | 1 | o-----+---+-----+--->| 1 | o-----+--->| 2 | null | :
: +----+----------+ : : +----+----------+ +----+----------+ :
: : : :
: : : :
`- - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - -'
```

View File

@ -20,24 +20,24 @@ fn main() {
.- - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - - -.
: : : :
: list : : :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: | Tag | Cons | : : .->| Tag | Cons | .->| Tag | Nil | :
: | 0 | 1 | : : | | 0 | 2 | | | ////// | //// | :
: | 1 | o-----+----+-----+-' | 1 | o------+-' | ////// | //// | :
: +--------+-------+ : : +--------+--------+ +--------+------+ :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: | Tag | .0 | .1 | : : | Tag | .0 | .1 | | Tag | .0 | .1 | :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: | Cons | 1 | o--+----+-----+--->| Cons | 2 | o--+--->| Nil | // | // | :
: +------+----+----+ : : +------+----+----+ +------+----+----+ :
: : : :
: : : :
`- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'
'- - - - - - - - - - - - -' '- - - - - - - - - - - - - - - - - - - - - - - -'
```
<details>
* If the `Box` was not used here and we attempted to embed a `List` directly into the `List`,
the compiler would not compute a fixed size of the struct in memory, it would look infinite.
* `Box` solves this problem as it has the same size as a regular pointer and just points at the next
element of the `List` in the heap.
* Remove the `Box` in the List definition and show the compiler error. `Recursive with indirection` is a hint you might want to use a Box or reference of some kind, instead of storing a value directly.
* `Box` solves this problem as it has the same size as a regular pointer and just points at the next
element of the `List` in the heap.
* Remove the `Box` in the List definition and show the compiler error. `Recursive with indirection` is a hint you might want to use a Box or reference of some kind, instead of storing a value directly.
</details>