Nguyên lý cấp phát bộ nhớ cho biến trong Python

Lập trình viên hiểu rõ chi tiết về nguyên lý cấp phát bộ nhớ cho biến trong Python giúp lập trình ứng dụng với Python tốt hơn.

  1. Ví dụ cơ bản để thực hành
  2. Giải thích thuần túy
  3. Giải thích chi tiết về sự cấp phát bộ nhớ cho biến

1. Ví dụ cơ bản để thực hành

Tạo 1 chương trình, với 1 dòng code cơ bản sau để các bạn hiểu:

a=5

2. Giải thích thuần tý

Khai báo biến: Python tự động tạo một vùng nhớ cho biến a để lưu trữ giá trị 5.

Gán giá trị: Python nhận diện giá trị 5 là một số nguyên (int) và cấp phát bộ nhớ cho đối tượng số nguyên này. 

Đây là cách giải thích gọn.

3. Giải thích chi tiết về sự cấp phát bộ nhớ cho biến

Định nghĩa 2 loại bộ nhớ Stack, Heap trong hệ thống máy tính

Stack là bộ nhớ được sử dụng cho các biến cục bộ và tham số hàm. Nó được quản lý tự động, nhanh chóng nhưng có giới hạn về kích thước. Các biến trong stack có thể bị mất khi hàm kết thúc.

Heap là bộ nhớ dành cho các đối tượng và dữ liệu động mà bạn muốn lưu trữ trong suốt vòng đời của chương trình. Nó linh hoạt hơn và có thể sử dụng nhiều bộ nhớ hơn, nhưng quản lý bộ nhớ phức tạp và chậm hơn stack.

Nguyên lý cấp phát bộ nhớ cho biến trong Python

Quy trình

(B1) Tạo đối tượng trong bộ nhớ (Heap)

Python coi mọi giá trị như một đối tượng trong bộ nhớ (dù là số nguyên, chuỗi, danh sách, v.v.).

Đối tượng 5 (số nguyên) sẽ được tạo ra trong bộ nhớ heap, không phải trong stack.

Python sẽ lưu trữ giá trị 5 trong heap và gán một con trỏ (reference) trỏ tới đối tượng này.

(B2). Cấp phát bộ nhớ cho biến (Stack)

Biến a sẽ được tạo ra trong stack (bộ nhớ tạm thời), nhưng không phải chứa giá trị trực tiếp. Thay vào đó, biến a sẽ là một tham chiếu (reference) trỏ tới đối tượng 5 trong heap.

Stack chỉ lưu trữ tham chiếu (địa chỉ của đối tượng trong heap), giúp tiết kiệm bộ nhớ và cho phép truy xuất đối tượng một cách nhanh chóng.

(B3). Quản lý tham chiếu và bộ đếm (Reference Counting)

Mỗi đối tượng trong Python (bao gồm số nguyên 5) có một bộ đếm tham chiếu (reference count), theo dõi số lượng biến hoặc đối tượng tham chiếu đến nó.

Khi bạn gán a = 5, bộ đếm tham chiếu của đối tượng 5 trong heap sẽ tăng lên 1.

Nếu bạn gán thêm một biến b = a, thì bộ đếm tham chiếu của đối tượng 5 sẽ tăng lên 2 (do cả ab đều tham chiếu đến đối tượng này).

3. Sơ đồ quy trình cấp phát bộ nhớ cho biến trong Python

  • Khai báo biến: a = 5 tạo biến a trong stack, với giá trị 5 được lưu trong heap.
  • Cấp phát bộ nhớ cho đối tượng: Giá trị 5 được lưu trong heap, và stack sẽ lưu trữ tham chiếu tới đối tượng này.
  • Quản lý tham chiếu: Mỗi đối tượng trong heap có một bộ đếm tham chiếu.
  • Python tự động giải phóng bộ nhớ cho các đối tượng không còn tham chiếu nào.

 

Tìm kiếm:

Lập trình viên hiểu rõ chi tiết về nguyên lý cấp phát bộ nhớ cho biến trong Python giúp lập trình ứng dụng với Python tốt hơn.