Rust

Memory Management

Stack проти heap, allocator, Drop trait, RAII, витоки пам'яті через цикли Rc, Pin<T>

20 питань зі співбесід·
Senior
1

Де в Rust зберігаються локальні змінні примітивних типів, таких як i32 або bool?

Відповідь

Локальні змінні примітивних типів зберігаються на stack. Stack забезпечує дуже швидке виділення та звільнення пам'яті, оскільки працює за принципом LIFO (Last In, First Out). Примітивні типи мають розмір, відомий під час компіляції, що дозволяє компілятору зарезервувати необхідний простір у stack frame поточної функції.

2

Який smart pointer слід використовувати для виділення значення на heap з одним власником?

Відповідь

Box<T> — це найпростіший smart pointer для виділення на heap. Він гарантує одноосібне володіння та автоматично звільняє пам'ять, коли Box виходить зі scope. Box корисний для типів з невідомим під час компіляції розміром, для великих структур, які не хочеться копіювати на stack, або для рекурсивних типів.

3

Що таке патерн RAII (Resource Acquisition Is Initialization) у Rust?

Відповідь

RAII — це патерн, у якому ресурси (пам'ять, файли, з'єднання) набуваються під час створення об'єкта та автоматично звільняються під час його знищення. У Rust це робиться через trait Drop, який автоматично викликається, коли значення виходить за межі scope. Цей патерн гарантує, що жоден ресурс не буде забуто, і запобігає витокам пам'яті.

4

Коли trait Drop автоматично викликається у Rust?

5

Як можна створити витік пам'яті (memory leak) за допомогою Rc<T> у Rust?

+17 питань зі співбесід

Опануй Rust для наступної співбесіди

Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.

Почни безкоштовно