
Quản lý bộ nhớ
Stack vs heap, escape analysis, garbage collector, memory profiling, pprof, memory leaks
1Sự 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ì?
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.
2Escape analysis trong Go là gì?
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ớ.
3Làm thế nào để xem kết quả escape analysis trong quá trình biên dịch?
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.
Trong trường hợp nào một biến cục bộ escape sang heap?
Vai trò chính của garbage collector trong Go là gì?
+21 câu hỏi phỏng vấn
Các chủ đề phỏng vấn Go khác
Kiến thức cơ bản về Go
Cấu trúc dữ liệu Go
Interface trong Go
Xử lý lỗi
Cơ bản về Goroutine
Channels
Go Modules
Máy chủ HTTP
HTTP Client
Mã hóa JSON
Database/SQL
Gói context
Testing
Các mẫu Concurrency
Primitive đồng bộ hóa
Framework web Go
Thiết kế API REST
gRPC
Reflection
Tối ưu hóa hiệu năng
Generics
Go Design Patterns
Microservices
Bảo mật và Xác thực
Docker & Containerization
Kubernetes Basics
Go Nâng cao
Phát triển CLI
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í