Go

Quản lý bộ nhớ

Stack vs heap, escape analysis, garbage collector, memory profiling, pprof, memory leaks

24 câu hỏi phỏng vấn·
Senior
1

Sự khác biệt chính giữa cấp phát trên stack và cấp phát trên heap trong Go là gì?

Câu trả lời

Stack được quản lý tự động và việc cấp phát cực kỳ nhanh (chỉ đơn giản là dịch chuyển stack pointer). Các biến trên stack được tự động giải phóng khi hàm trả về. Heap cần garbage collector để giải phóng bộ nhớ và việc cấp phát chậm hơn vì có sự tham gia của Go runtime. Các biến tồn tại vượt ra ngoài hàm hoặc có kích thước không xác định tại thời điểm biên dịch sẽ nằm trên heap.

2

Escape analysis trong Go là gì?

Câu trả lời

Escape analysis là một phân tích tĩnh được trình biên dịch Go thực hiện để xác định xem một biến có thể nằm trên stack hay phải được cấp phát trên heap. Nếu trình biên dịch phát hiện một biến được tham chiếu bên ngoài hàm tạo ra nó (qua một con trỏ được trả về, lưu trong biến toàn cục, v.v.), biến đó 'escape' và sẽ được cấp phát trên heap. Phân tích này tự động tối ưu hóa việc cấp phát bộ nhớ.

3

Làm thế nào để xem kết quả escape analysis trong quá trình biên dịch?

Câu trả lời

Cờ -gcflags=-m cho phép xem các quyết định của escape analysis. Sử dụng -m=2 hoặc -m=3 cung cấp thêm chi tiết về lý do một biến escape. Ví dụ 'go build -gcflags=-m=2' sẽ hiển thị các thông báo như 'moved to heap: x' để cho biết một biến đã được chuyển sang heap. Công cụ này rất cần thiết để tối ưu hóa việc cấp phát bộ nhớ trong mã quan trọng.

4

Trong trường hợp nào một biến cục bộ escape sang heap?

5

Vai trò chính của garbage collector trong Go là gì?

+21 câu hỏi phỏng vấn

Nắm vững Go cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí