Hiểu phân bổ bộ nhớ rất quan trọng đối với bất kỳ nhà phát triển phần mềm nào vì viết mã hiệu quả có nghĩa là viết mã tiết kiệm bộ nhớ. Phân bổ bộ nhớ có thể được định nghĩa là phân bổ một khối không gian trong bộ nhớ máy tính cho một chương trình. Trong phương pháp phân bổ và phân bổ bộ nhớ Python là tự động vì các nhà phát triển Python đã tạo ra một trình thu thập rác cho Python để người dùng không phải thực hiện bộ sưu tập rác thủ công.
Thu gom rác thải
Bộ sưu tập rác là một quá trình trong đó trình thông dịch giải phóng bộ nhớ khi không sử dụng để cung cấp cho nó cho các đối tượng khác. Tôi là một trường hợp không có tham chiếu nào chỉ vào một đối tượng trong bộ nhớ, tức là nó không được sử dụng như vậy, máy ảo có Bộ thu gom rác tự động xóa đối tượng đó khỏi bộ nhớ heap
Assume a case where no reference is pointing to an object in memory i.e. it is not in use so, the virtual machine has a garbage collector that automatically deletes that object from the
heap memory
Lưu ý: Để biết thêm thông tin, hãy tham khảo Bộ sưu tập rác trong Python For more information, refer to Garbage Collection in Python
Đếm tham chiếu
Đếm tham chiếu hoạt động bằng cách đếm số lần một đối tượng được tham chiếu bởi các đối tượng khác trong hệ thống. Khi các tham chiếu đến một đối tượng được xóa, số lượng tham chiếu cho một đối tượng bị giảm. Khi số lượng tham chiếu trở thành 0, đối tượng được giải quyết.
Ví dụ: giả sử có hai hoặc nhiều biến có cùng một giá trị, vì vậy, máy ảo Python làm gì, thay vì tạo một đối tượng khác có cùng giá trị trong đống riêng tư, nó thực sự tạo ra biến thứ hai Giá trị hiện có trong đống riêng tư. Do đó, trong trường hợp của các lớp, có một số tài liệu tham khảo có thể chiếm một lượng lớn không gian trong bộ nhớ, trong trường hợp như vậy, việc đếm tính rất có lợi để bảo tồn bộ nhớ có sẵn cho các đối tượng khác
Example:
Khi x = 10
được thực thi, đối tượng số nguyên 10 được tạo trong bộ nhớ và tham chiếu của nó được gán cho biến X, điều này là do mọi thứ đều là đối tượng trong Python.
Hãy để xác minh nếu nó đúng
x
=
10
y
=
x
if
x and y do not refer to the same object0
x and y do not refer to the same object1
=
=
x and y do not refer to the same object0
x and y do not refer to the same object5
x and y do not refer to the same object6
x and y do not refer to the same object7
x and y do not refer to the same object8
x and y do not refer to the same object9
x = 10
0Output:
x and y refer to the same object
Trong ví dụ trên, x = 10
1 sẽ tạo một biến tham chiếu khác y sẽ đề cập đến cùng một đối tượng vì Python tối ưu hóa việc sử dụng bộ nhớ bằng cách phân bổ cùng một đối tượng tham chiếu đến một biến mới nếu đối tượng đã tồn tại với cùng một giá trị.
Bây giờ, hãy để thay đổi giá trị của X và xem điều gì sẽ xảy ra.
x
=
10
y
=
x
if
x and y do not refer to the same object0
x and y do not refer to the same object1
=
=
x and y do not refer to the same object0
x and y do not refer to the same object5
Trong ví dụ trên, x = 10
1 sẽ tạo một biến tham chiếu khác y sẽ đề cập đến cùng một đối tượng vì Python tối ưu hóa việc sử dụng bộ nhớ bằng cách phân bổ cùng một đối tượng tham chiếu đến một biến mới nếu đối tượng đã tồn tại với cùng một giá trị.
x and y do not refer to the same object6
x and y do not refer to the same object7
x and y do not refer to the same object8
=
1x = 10
0Output:
x and y do not refer to the same object
Bây giờ, hãy để thay đổi giá trị của X và xem điều gì sẽ xảy ra.
x
x = 10
9____4 x
1
if
x and y do not refer to the same object0
x
4=
x and y do not refer to the same object0
x and y do not refer to the same object5
- Vì vậy, bây giờ X đề cập đến một đối tượng mới X và liên kết giữa X và 10 bị ngắt kết nối nhưng Y vẫn đề cập đến 10.
- Phân bổ bộ nhớ trong Python
Có hai phần của bộ nhớ:stack memory and all the values objects are stored in a private heap.
ngăn xếp bộ nhớ
bộ nhớ đống
Các phương thức/gọi phương thức và các tham chiếu được lưu trữ trong bộ nhớ ngăn xếp và tất cả các đối tượng giá trị được lưu trữ trong một đống riêng tư.
Example:
Công việc của bộ nhớ ngăn xếp
Việc phân bổ xảy ra trên các khối bộ nhớ liền kề. Chúng tôi gọi nó là phân bổ bộ nhớ ngăn xếp vì phân bổ xảy ra trong ngăn xếp gọi hàm. Kích thước của bộ nhớ được phân bổ được biết đến với trình biên dịch và bất cứ khi nào một hàm được gọi, các biến của nó sẽ được phân bổ bộ nhớ trên ngăn xếp.
Đó là bộ nhớ chỉ cần thiết bên trong một cuộc gọi chức năng hoặc phương thức cụ thể. Khi một hàm được gọi, nó được thêm vào ngăn xếp cuộc gọi của chương trình. Bất kỳ gán bộ nhớ cục bộ nào như khởi tạo biến bên trong các hàm cụ thể đều được lưu trữ tạm thời trên ngăn xếp gọi hàm, trong đó nó bị xóa khi hàm quay lại và ngăn xếp cuộc gọi chuyển sang tác vụ tiếp theo. Phân bổ này vào một khối bộ nhớ tiếp giáp được xử lý bởi trình biên dịch bằng cách sử dụng các thói quen được xác định trước và các nhà phát triển không cần phải lo lắng về nó.
=
3 =
4
x and y do not refer to the same object
6=
6=
=
8
x and y do not refer to the same object6
10
0__ 10
2Example: