
Memory Management
Stack проти heap, allocator, Drop trait, RAII, витоки пам'яті через цикли Rc, Pin<T>
1Де в Rust зберігаються локальні змінні примітивних типів, таких як i32 або bool?
Де в Rust зберігаються локальні змінні примітивних типів, таких як i32 або bool?
Відповідь
Локальні змінні примітивних типів зберігаються на stack. Stack забезпечує дуже швидке виділення та звільнення пам'яті, оскільки працює за принципом LIFO (Last In, First Out). Примітивні типи мають розмір, відомий під час компіляції, що дозволяє компілятору зарезервувати необхідний простір у stack frame поточної функції.
2Який smart pointer слід використовувати для виділення значення на heap з одним власником?
Який smart pointer слід використовувати для виділення значення на heap з одним власником?
Відповідь
Box<T> — це найпростіший smart pointer для виділення на heap. Він гарантує одноосібне володіння та автоматично звільняє пам'ять, коли Box виходить зі scope. Box корисний для типів з невідомим під час компіляції розміром, для великих структур, які не хочеться копіювати на stack, або для рекурсивних типів.
3Що таке патерн RAII (Resource Acquisition Is Initialization) у Rust?
Що таке патерн RAII (Resource Acquisition Is Initialization) у Rust?
Відповідь
RAII — це патерн, у якому ресурси (пам'ять, файли, з'єднання) набуваються під час створення об'єкта та автоматично звільняються під час його знищення. У Rust це робиться через trait Drop, який автоматично викликається, коли значення виходить за межі scope. Цей патерн гарантує, що жоден ресурс не буде забуто, і запобігає витокам пам'яті.
Коли trait Drop автоматично викликається у Rust?
Як можна створити витік пам'яті (memory leak) за допомогою Rc<T> у Rust?
+17 питань зі співбесід
Інші теми співбесід Rust
Основи Rust
Ownership & Borrowing
Structs & Enums
Обробка помилок
Колекції
Модулі та пакети
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
Макроси
Serde та серіалізація
Unsafe Rust
Просунуті trait'и
Просунуті Lifetimes
Type System
Tokio & Async I/O
Оптимізація продуктивності
Web Frameworks
Database Integration
Патерни проєктування Rust
Опануй Rust для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно