2010-03-01 23 views
16

Trong C#, kiểu giá trị (ví dụ: int, float, vv) được lưu trữ trên ngăn xếp. Tham số phương thức cũng có thể được lưu trữ trên ngăn xếp. Hầu hết mọi thứ khác, tuy nhiên, được lưu trữ trên heap. Điều này bao gồm Danh sách, đối tượng, v.v.CPython - Nội bộ, những gì được lưu trữ trên ngăn xếp và đống?

Tôi đã tự hỏi, không CPython làm điều tương tự trong nội bộ? Những gì nó lưu trữ trên ngăn xếp, và những gì nó đặt trên đống?

+0

Tôi giả sử bạn có nghĩa là * "Hầu hết mọi thứ khác, tuy nhiên, được lưu trữ trên ** đống **." * –

+8

Bạn có thể muốn nói "CPython", không phải "Python". Python là một ngôn ngữ; nó không có ý kiến ​​nơi các đối tượng cần được lưu trữ, miễn là việc triển khai thực hiện các ngữ nghĩa mà Python yêu cầu. CPython là việc thực hiện Python được viết bằng C mà hầu hết mọi người sử dụng. Các câu trả lời từ John Feminella và Alex Martelli bên dưới đều liên quan đến CPython. PyPy, Jython và IronPython có ý kiến ​​riêng về vị trí lưu trữ đối tượng; thật đáng buồn là tôi không biết gì về họ. –

+0

@BlueRaja - Cảm ơn, tốt bắt. –

Trả lời

20

Tất cả các đối tượng Python trong việc triển khai CPython đều đi vào vùng heap. Bạn có thể đọc chi tiết cách quản lý bộ nhớ của Python làm việc here trong tài liệu:

Quản lý bộ nhớ bằng Python liên quan đến một đống tin chứa tất cả các đối tượng Python và cấu trúc dữ liệu. Việc quản lý heap riêng này được đảm bảo nội bộ bởi trình quản lý bộ nhớ Python. Trình quản lý bộ nhớ Python có các thành phần khác nhau xử lý các khía cạnh quản lý lưu trữ động khác nhau, như chia sẻ, phân đoạn, preallocation hoặc bộ nhớ đệm.

Lưu ý rằng bản thân Python chỉ là một ngôn ngữ và không nói gì về cách thức các nội bộ như quản lý bộ nhớ hoạt động; đây là một chi tiết còn lại để thực hiện.

11

Thời gian chạy của Python chỉ đề cập đến các đối tượng (tất cả đều nằm trong heap): những gì xảy ra trên stack của Python (như toán hạng và kết quả hoạt động bytecode) luôn là tài liệu tham khảo (với các giá trị sống ở nơi khác).

+3

Bạn có thể giải thích thêm về 'những gì xảy ra trên stack của Python luôn luôn là tài liệu tham khảo' hoặc cung cấp một số tham chiếu? – laike9m

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