Skip to content

Commit f3a8c00

Browse files
authored
Fix spelling errors in the Russian translation of post 11 (#1464)
i was fixed some typo in Russian translation of post 11
2 parents 2cf4e67 + aefcffd commit f3a8c00

File tree

1 file changed

+5
-5
lines changed
  • blog/content/edition-2/posts/11-allocator-designs

1 file changed

+5
-5
lines changed

blog/content/edition-2/posts/11-allocator-designs/index.ru.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ error[E0594]: cannot assign to `self.next` which is behind a `&` reference
193193

194194
#### `GlobalAlloc` и Мутабельность {#globalalloc-and-mutability}
195195

196-
Прежде чем рассматривать возможное решение этой проблемы мутаблельности, давайте попробуем понять, почему методы трейта `GlobalAlloc` определены с аргументами `&self`: как мы видели [в предыдущем посте][global-allocator], глобальный аллокатор кучи определяется добавлением атрибута `#[global_allocator]` к `static`, который реализует трейт `GlobalAlloc`. Статические переменные в Rust иммутабельны, поэтому нет возможности вызвать метод, принимающий `&mut self`, на статическом аллокаторе. По этой причине все методы `GlobalAlloc` принимают только неизменяемую ссылку `&self`.
196+
Прежде чем рассматривать возможное решение этой проблемы мутабельности, давайте попробуем понять, почему методы трейта `GlobalAlloc` определены с аргументами `&self`: как мы видели [в предыдущем посте][global-allocator], глобальный аллокатор кучи определяется добавлением атрибута `#[global_allocator]` к `static`, который реализует трейт `GlobalAlloc`. Статические переменные в Rust иммутабельны, поэтому нет возможности вызвать метод, принимающий `&mut self`, на статическом аллокаторе. По этой причине все методы `GlobalAlloc` принимают только неизменяемую ссылку `&self`.
197197

198198
[global-allocator]: @/edition-2/posts/10-heap-allocation/index.md#the-global-allocator-attribute
199199

@@ -398,7 +398,7 @@ many_boxes... [ok]
398398

399399
#### Недостатки Bump-Аллокатора
400400

401-
Основное ограничение bump-аллокатора это то, что он можено использовать освобожденную память только после того, как все будет освобождено. То есть одной долговечной аллокации достаточно, чтобы заблокировать повторное использование памяти. Мы можем увидеть это добавив вариацию теста `many_boxes`:
401+
Основное ограничение bump-аллокатора это то, что он можно использовать освобожденную память только после того, как все будет освобождено. То есть одной долговечной аллокации достаточно, чтобы заблокировать повторное использование памяти. Мы можем увидеть это добавив вариацию теста `many_boxes`:
402402

403403
```rust
404404
// tests/heap_allocation.rs
@@ -456,13 +456,13 @@ Error: panicked at 'allocation error: Layout { size_: 8, align_: 8 }', src/lib.r
456456

457457
## Linked List Allocator
458458

459-
Одна из распространенных техник для отслеживания свободных областей памяти при реализации аллокаторов - это использование этих самых областей как хранилища. Мы используем факт, что регионы все еще маппяться в виртуальную память и храняться на физическом фрейме, но хранящаяся информация больше не требуется. Записывая информацию об освобожденном регионе прямо в саму область, мы может отслеживать неограниченное кол-во свободных регионов без необходимости дополнительной памяти.
459+
Одна из распространенных техник для отслеживания свободных областей памяти при реализации аллокаторов - это использование этих самых областей как хранилища. Мы используем факт, что регионы все еще маппятся в виртуальную память и храняться на физическом фрейме, но хранящаяся информация больше не требуется. Записывая информацию об освобожденном регионе прямо в саму область, мы может отслеживать неограниченное кол-во свободных регионов без необходимости дополнительной памяти.
460460

461461
Наиболее частый подход к реализации - создание связанного списка (linked list) в освобожденной памяти, где каждый узел представляет собой свободную область памяти:
462462

463463
![](linked-list-allocation.svg)
464464

465-
Каждый узел списка содержит два поля: размер свободного региона и указатель на следующий свободный регион памяти. При таком подходе нам достаточно хранить лишь указатель на первый свободный регион (называемый `head`), чтобы отслеживать все свободные области, независимо от их количиства. Получившаяся структура данных часто называется [cписок свободной памяти][_free list_]
465+
Каждый узел списка содержит два поля: размер свободного региона и указатель на следующий свободный регион памяти. При таком подходе нам достаточно хранить лишь указатель на первый свободный регион (называемый `head`), чтобы отслеживать все свободные области, независимо от их количества. Получившаяся структура данных часто называется [cписок свободной памяти][_free list_]
466466

467467
[_free list_]: https://en.wikipedia.org/wiki/Free_list
468468

@@ -636,7 +636,7 @@ impl LinkedListAllocator {
636636
current.next = next;
637637
return ret;
638638
} else {
639-
// облать не подходит -> перейти к следущей
639+
// облать не подходит -> перейти к следующей
640640
current = current.next.as_mut().unwrap();
641641
}
642642
}

0 commit comments

Comments
 (0)