2016-07-04 16 views
6

Cách bộ nhớ được quản lý bằng ruby. Đối với Ví dụ: nếu chúng tôi thực hiện chương trình C trong khi thực thi, sau đây là mô hình bộ nhớ. Tương tự như điều này cách bộ nhớ được xử lý bằng ruby.Mô hình bộ nhớ trong Ruby

C: 
         __________________ 
         |    | 
         |  stack  | 
         |    | 
         ------------------ 
         |    | 
         | <Un Allocated| 
         |  space> | 
         ------------------ 
         |    | 
         |    | 
         |  Heap  | 
         |    | 
         |    | 
         __________________ 
         |    | 
         |  data  | 
         __________________ 
         |  text  | 
         __________________ 

Ruby: 

       ? 
+1

Không có nội dung nào hiển thị với chương trình Ruby. Tất cả điều này được tóm tắt bởi người phiên dịch. –

+0

@undur_gongor Atleast bất kỳ biểu đồ Khái niệm nào? – mrg

+2

Một hộp có nhãn "bộ nhớ"? –

Trả lời

8

Không có điều nào như "bộ nhớ" trong Ruby.

Class#allocate phân bổ đối tượng và trả về đối tượng đó. Và đó là toàn bộ mức độ tương tác mà một lập trình viên có thể có với hệ thống con không gian đối tượng.

Trường hợp đối tượng đó được phân bổ, cách phân bổ đối tượng đó, nếu nó vẫn ở cùng một vị trí trong bộ nhớ hoặc di chuyển xung quanh, không có mục nào được chỉ định hoặc quan sát được. Ví dụ, trên MagLev, một đối tượng có thể thực sự không được cấp phát trong bộ nhớ, nhưng trên đĩa hoặc trong bộ nhớ của máy tính khác. JRuby, IronRuby, Opal, Hồng y, MacRuby, vv "thuê ngoài" quản lý bộ nhớ của họ cho bên thứ ba, họ theo nghĩa đen thậm chí không biết điều gì đang xảy ra với bộ nhớ của họ.

Việc triển khai Ruby có thể sử dụng ngăn xếp và chồng riêng biệt, nó có thể sử dụng chồng được phân bổ, nó thậm chí không thể sử dụng ngăn xếp (ví dụ: Hồng y).

Lưu ý: mô-đun ObjectSpace cho phép giới hạn số lượng nội suy và phản ánh không gian đối tượng. Nói chung, khi tôi nói điều gì đó là "không thể" trong Ruby, luôn luôn có một cảnh báo tiềm ẩn "trừ khi bạn sử dụng sự phản chiếu". Tuy nhiên, ngay cả ObjectSpace cũng không làm rò rỉ bất kỳ thông tin nào về tổ chức bộ nhớ.

Trong YARV, cũng có thư viện objspace và mô-đun GC, cung cấp chi tiết triển khai nội bộ về YARV. Tuy nhiên, chúng là chi tiết thực hiện nội bộ riêng tư của YARV, chúng thậm chí không được bảo đảm tồn tại trong các triển khai khác và chúng có thể thay đổi bất kỳ lúc nào mà không cần thông báo ngay cả trong YARV.

Bạn có thể lưu ý rằng tôi không viết gì về thu gom rác! Thực ra, Ruby chỉ xác định khi nào các đối tượng được tham chiếu và khi chúng không được. Việc cần làm với các đối tượng không được tham chiếu, nó không nói. Có ý nghĩa cho việc triển khai xác nhận lại không gian được sử dụng bởi các đối tượng không được xử lý đó và tất cả chúng đều ở một mức độ nào đó (ví dụ: các phiên bản cũ hơn của YARV sẽ không đòi lại số Symbol s), nhưng không bắt buộc cũng như không được chỉ định. Và mọi triển khai đều sử dụng các cách tiếp cận rất khác nhau. Một lần nữa, JRuby, IronRuby, Opal, Hồng y, MacRuby, Topaz, MagLev, vv "outsource" vấn đề cho nền tảng cơ bản, Rubinius sử dụng một bộ sưu tập thế hệ, sao chép, di chuyển, theo dõi dựa trên bộ sưu tập Immix, YARV sử dụng một dấu đơn giản - và quét truy tìm collector.

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