Tôi đang phát triển một trình biên dịch cho một ngôn ngữ tương tự như Đề án, và đang đọc qua luận án của Dybvig. Trong đó, ông nói rằng đạt được hầu hết hiệu suất của mình đạt được bằng cách phân bổ các khung gọi trên stack thay vì trên đống. Có một số thủ thuật cần phải được thực hiện để thực sự làm cho công việc này trong sự hiện diện của đóng cửa và tiếp tục.Điều gì làm cho một lược đồ dựa trên heap chậm hơn một lược đồ dựa trên stack?
Câu hỏi của tôi là hiệu suất này đến từ đâu? Nó hoàn toàn là vì chúng tôi đặt ít căng thẳng vào bộ thu gom rác?
Đặt một cách khác: Giả sử chúng tôi có số lượng bộ nhớ vô hạn, các khung cuộc gọi được phân bổ sẽ vẫn nhanh hơn khung cuộc gọi được phân bổ heap?
Bạn đề cập đến "bộ thu gom rác" - ngôn ngữ triển khai của bạn là gì? –
Ngôn ngữ thực hiện của tôi là C. Nhưng tôi nên làm rõ, tôi có nghĩa là đạt được hiệu suất cho mã được biên dịch, * không * đạt được hiệu suất cho trình biên dịch. –
Lưu ý thực sự là một câu trả lời nhưng: (a) đối phó với heap mất nhiều thời gian hơn vì nó đòi hỏi phải quét nó (nó không phải là tuyến tính như ngăn xếp); (b) thực tế tất cả các kiến trúc cpu đặt thêm sự nhấn mạnh vào việc truy cập stack nhanh nhất có thể, và không như vậy với heap. –