2013-04-30 28 views
9

Đây là một tập con của a previous question.Thuật toán quản lý bộ nhớ nào được các nhà cung cấp trình biên dịch chính sử dụng?

Là bài tập tôi viết một trình quản lý bộ nhớ - tức là, mã thực hiện malloc, realloc và miễn phí (hoặc mới và xóa.) RTL cho ngôn ngữ của tôi, Delphi, allows the RTL's memory manager to be replaced easily. Đối với những người bạn sử dụng C++, điều này tương tự như, nhưng mức thấp hơn, ghi đè mới và xóa (nó móc vào bản thân RTL chứ không phải là một tính năng ngôn ngữ.)

Tôi đang tìm kiếm tài nguyên về cao các phương pháp tiếp cận chất lượng mà những người khác đã thực hiện cho cùng một vấn đề và tôi đang cố gắng tìm ra những thuật toán nào mà các nhà cung cấp trình biên dịch khác sử dụng. Trong khi Delphi có tài liệu tốt, tôi không thể tìm thấy bất kỳ thông tin nào về các triển khai được sử dụng bởi MS VC++, .Net, hoặc Objective C. Những nhà cung cấp này dường như không (?) Để cho phép RTL của họ được nối vào như Delphi. Tất cả tài liệu có vẻ là cấp cao hơn, chẳng hạn như NSAutoReleasePool để chọn một ví dụ ngẫu nhiên - quá cao cấp cho câu hỏi này.

Thuật toán quản lý bộ nhớ nào làm các nhà cung cấp chính (Microsoft VC++ và .Net và Apple Objective C) sử dụng trong thư viện thời gian chạy của chúng?

Một ví dụ về một lớn câu trả lời sẽ là một tài liệu mô tả việc thực hiện quản lý bộ nhớ, chẳng hạn như this one, hoặc một liên kết đến một bài báo được công bố. Ví dụ về câu trả lời hữu ích hữu ích sẽ là thuật toán, 'Thời gian chạy VC++ sử dụng the Hoard allocator'.

+0

Chà ... nhưng quản lý bộ nhớ là một con quái vật phức tạp - nó có thể xâm nhập vào nhiều cấp độ nhiều. Ví dụ với Delphi: FastMM4 thực hiện ba thuật toán tùy thuộc vào kích thước khối. Nhưng trên đầu trang của nó có RTL, mà thực hiện copy-on-write + quản lý bộ nhớ đếm ngược cho dyn-mảng và chuỗi. Sau đó, có TComponent và TObjectList contsiner lớp học thực hiện chủ sở hữu-Items algorythm sau đó có TInterfaceObject đến để đếm lại ... Và tất cả những người LÀ algorythms quản lý bộ nhớ. Và tất cả những algorythms cùng nhau thực hiện CHIẾN LƯỢC cho HMMgr + Language + RTL –

+2

+1, đây là một câu hỏi khá thú vị, nếu chỉ cho mục đích học thuật :-) –

+1

Với các ngôn ngữ dựa trên GC như .Net, JVM và ObjC một lần nữa, được kỳ vọng khác nhau và các thuật toán khác nhau trong bộ nhớ quản lý, tùy thuộc vào thông tin có thể (hoặc có thể không) Memory Manager đáng tin cậy nhận được từ ngôn ngữ. Chỉ cần đọc nội dung của http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) –

Trả lời

1

Mục tiêu-C sử dụng tính tham chiếu tự động (ARC). Nó được kích hoạt như iOS5. Apple có bằng sáng chế Hoa Kỳ 20030196063 "Hệ thống quản lý bộ nhớ trong và phân phối trong suốt".

Java sử dụng lược đồ thu gom rác tinh vi đã phát triển qua nhiều năm. Xem "Điều chỉnh bộ sưu tập rác bằng máy ảo Java [tm] 5.0" http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

+0

Bạn đang mô tả quản lý đối tượng suốt đời ở đây, không phân bổ bộ nhớ. Cấp phát bộ nhớ thấp hơn - đó là mã chạy để cấp phát bộ nhớ khi một đối tượng được tạo ra, ví dụ. –

Các vấn đề liên quan