2011-07-08 41 views

Trả lời

10

Hãy tưởng tượng bạn gọi một hàm Win32 sử dụng P/Invoke và phân bổ một số bộ nhớ bằng cách sử dụng malloc. Trình thu thập rác không có khả năng hiển thị của bộ nhớ đó - đó là không được quản lý.

Điều đó có thể hoặc có thể không phải là ngữ cảnh mà bạn đã nghe thuật ngữ, tất nhiên - nếu bạn có thể chỉ cho chúng tôi một số ví dụ, chúng tôi có thể giúp bạn nhiều hơn.

+1

Ok vậy trong ngữ cảnh của CLR, không có vùng không được quản lý. Vì vậy, nó chỉ là bộ nhớ được sử dụng bởi các mã không được quản lý, mà phải được độc quyền xử lý cho một GC hoàn chỉnh .... chính xác? –

+0

@ user164184, nghe có vẻ đúng. –

+2

@ user164184: Tôi sẽ không nói có * là * không có vùng lưu trữ không được quản lý - chúng tôi không cần phải lo lắng về điều đó. Bản thân CLR sẽ không nghi ngờ gì khi sử dụng các cấu trúc dữ liệu không được quản lý. –

6

Theo John Skeet - là một trong đó .net sẽ quản lý cho bạn, tất cả các đối tượng tiêu chuẩn được tạo ra, bạn thường không cần phải bận tâm quá nhiều vì nó được quản lý.

unmanaged có nghĩa là bạn đang phân bổ bộ nhớ cá nhân và bạn chịu trách nhiệm cá nhân về việc giải quyết nó, tự quản lý bộ nhớ và theo dõi những gì đang được sử dụng.

Vì vậy, có, bộ nhớ đối tượng (theo ý nghĩa của việc tạo đối tượng bình thường và hủy diệt, những thứ có nguồn gốc từ đối tượng) được quản lý. Đó là những thứ khác bạn cần phải lo lắng về - đối tượng không và bộ nhớ được phân bổ cho họ.

0

Để hiểu Heap không được quản lý trong .net, chúng ta cần có ý tưởng về Managed Heap là gì.

Trong khung .net, chúng tôi có bộ gom rác được khởi tạo bởi thường trình ngôn ngữ thông thường. Khởi tạo trình thu gom rác phân bổ một phân đoạn bộ nhớ để lưu trữ và quản lý các đối tượng được tạo bởi mã được quản lý. Bộ nhớ này được gọi là vùng được quản lý, trái ngược với một đống bản địa trong hệ điều hành.

Vùng không được quản lý là mã được sử dụng bởi mã không được quản lý/mã gốc để cấp phát bộ nhớ tại thời gian chạy.Đây không nằm dưới sự kiểm soát của bộ thu gom rác và cần được nhà phát triển xử lý để giải phóng bộ nhớ được phân bổ. Difference between "managed" and "unmanaged"

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