Sau khi duyệt một số câu trả lời Stack Overflow, rõ ràng một số ngôn ngữ được biên dịch nguyên bản có bộ sưu tập rác . Nhưng tôi không rõ chính xác nó sẽ hoạt động như thế nào.
Tôi hiểu làm thế nào bộ sưu tập rác có thể làm việc với một ngôn ngữ diễn giải. Trình thu gom rác đơn giản sẽ chạy cùng với trình thông dịch và xóa các đối tượng không sử dụng và không thể truy cập khỏi bộ nhớ của chương trình. Cả hai đang chạy cùng nhau.
Làm thế nào điều này sẽ làm việc với các ngôn ngữ biên dịch mặc dù? Tôi hiểu rằng một khi trình biên dịch đã biên dịch mã nguồn thành mã đích - cụ thể là mã máy gốc - nó đã được thực hiện. Công việc của nó đã kết thúc. Vì vậy, làm thế nào chương trình biên dịch có thể được thu thập rác?
Trình biên dịch có hoạt động với CPU theo một cách nào đó trong khi chương trình được thực thi để xóa các đối tượng "rác" không? Hoặc trình biên dịch có bao gồm một số trình thu gom rác tối thiểu trong tệp thực thi của chương trình đã biên dịch.
Tôi tin rằng tuyên bố sau của tôi sẽ có giá trị hơn so với tuyên bố trước do đoạn trích này từ câu trả lời này trên Stack Overflow :
Một ngôn ngữ lập trình như vậy là Eiffel. Hầu hết các trình biên dịch Eiffel tạo mã C vì lý do tính di động. Mã C này được sử dụng để sản xuất mã máy bằng trình biên dịch C tiêu chuẩn. Việc triển khai Eiffel cung cấp GC (và đôi khi thậm chí là chính xác) cho mã được biên dịch này và không cần VM. Cụ thể, trình biên dịch VisualEiffel đã tạo mã máy x86 riêng trực tiếp với sự hỗ trợ đầy đủ của GC .
Câu lệnh cuối cùng dường như ngụ ý rằng trình biên dịch bao gồm một số chương trình trong tệp thực thi cuối cùng hoạt động như một trình thu gom rác trong khi chương trình đang chạy.
Trang trên trang web của ngôn ngữ D về bộ sưu tập rác - được biên soạn nguyên bản và có trình thu gom rác tùy chọn - dường như cũng gợi ý rằng một số chương trình nền chạy cùng với chương trình thực thi ban đầu để thực hiện thu gom rác.
D là ngôn ngữ lập trình hệ thống có hỗ trợ thu gom rác. Thông thường không cần thiết phải giải phóng bộ nhớ rõ ràng. Chỉ cần phân bổ khi cần và trình thu gom rác sẽ định kỳ trả lại tất cả bộ nhớ chưa sử dụng cho nhóm bộ nhớ khả dụng.
Nếu phương pháp được đề cập ở trên được sử dụng, chính xác thì nó sẽ hoạt động như thế nào? Trình biên dịch có lưu một bản sao của một số chương trình thu gom rác và dán nó vào mỗi tệp thực thi mà nó tạo ra không?
Hay tôi là thiếu sót trong suy nghĩ của tôi? Nếu vậy, phương pháp nào được sử dụng để thực hiện thu gom rác cho các ngôn ngữ được biên dịch và chính xác chúng sẽ hoạt động như thế nào?
malloc()
.