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 และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี