Sự khác biệt chính - Phân bổ bộ nhớ tĩnh so với động
Trong lập trình, cần lưu trữ dữ liệu tính toán. Những dữ liệu này được lưu trữ trong bộ nhớ. Các vị trí bộ nhớ để lưu trữ dữ liệu trong lập trình máy tính được gọi là các biến. Các biến có một kiểu dữ liệu cụ thể. Do đó, bộ nhớ được cấp phát để chạy các chương trình. Bộ nhớ có thể được cấp phát theo hai cách. Chúng là Cấp phát bộ nhớ tĩnh và Cấp phát bộ nhớ động. Trong cấp phát bộ nhớ tĩnh, một khi bộ nhớ được cấp phát, nó không thể thay đổi được. Bộ nhớ không thể sử dụng lại. Nhưng trong cấp phát bộ nhớ động, một khi bộ nhớ được cấp phát, nó có thể bị thay đổi. Sự khác biệt chính giữa cấp phát bộ nhớ tĩnh và động là trong cấp phát bộ nhớ tĩnh khi bộ nhớ được cấp phát, kích thước bộ nhớ được cố định trong khi cấp phát bộ nhớ động, sau khi cấp phát bộ nhớ, kích thước bộ nhớ có thể được thay đổi.
Phân bổ bộ nhớ tĩnh là gì?
Trong cấp phát bộ nhớ tĩnh, bộ nhớ được cấp phát là cố định. Khi bộ nhớ đã được cấp phát, nó không thể thay đổi được. Bộ nhớ không thể tăng hoặc giảm. Ví dụ, trong ngôn ngữ C nếu người lập trình viết int x, nghĩa là biến đó có thể lưu giá trị nguyên. Số lượng byte phụ thuộc vào máy tính. Cũng có thể có các mảng. Ví dụ. int x [5]; X này là một mảng có thể lưu trữ một chuỗi dữ liệu có cùng kiểu. Nó có thể lưu trữ năm phần tử số nguyên. Nó không thể lưu trữ nhiều hơn năm phần tử. Trong Java, một mảng có thể được tạo dưới dạng, int arr =new int [5]; Mảng ‘arr’ có thể lưu trữ 5 giá trị nguyên và không thể lưu trữ nhiều hơn thế.
Hình 01: Phương pháp cấp phát bộ nhớ
Trong cấp phát bộ nhớ tĩnh, khi các biến được cấp phát, chúng vẫn tồn tại vĩnh viễn. Sau khi cấp phát ban đầu, lập trình viên không thể thay đổi kích thước bộ nhớ. Nếu người lập trình phân bổ một mảng có thể lưu trữ 10 phần tử, thì không thể lưu trữ các giá trị nhiều hơn số lượng được chỉ định đó. Nếu ban đầu người lập trình phân bổ một mảng có thể chứa 10 phần tử, nhưng chỉ cần 5 phần tử, thì đó là sự lãng phí bộ nhớ. Bộ nhớ đó không còn cần thiết nữa, nhưng cũng không thể sử dụng lại bộ nhớ. Cấp phát bộ nhớ tĩnh là cố định nhưng việc thực hiện rất đơn giản, dễ dàng và cũng nhanh chóng.
Phân bổ bộ nhớ động là gì?
Đôi khi cần thay đổi kích thước của bộ nhớ. Vì vậy, bộ nhớ có thể được cấp phát động. Tùy thuộc vào việc chèn và xóa các phần tử dữ liệu, bộ nhớ có thể lớn lên hoặc thu nhỏ lại. Nó được gọi là cấp phát bộ nhớ động.
Trong ngôn ngữ C, tệp tiêu đề stdlib.h, có bốn chức năng để cấp phát bộ nhớ động. Chúng là calloc, malloc, realloc và miễn phí. Hàm malloc () phân bổ kích thước byte bắt buộc và trả về một con trỏ void, trỏ byte đầu tiên của bộ nhớ được cấp phát. Hàm calloc () phân bổ kích thước byte bắt buộc và khởi tạo chúng bằng 0. Sau đó trả về một con trỏ void vào bộ nhớ. Hàm free () được sử dụng để phân bổ lại bộ nhớ được cấp phát. Và hàm realloc có thể sửa đổi bộ nhớ đã được cấp phát trước đó. Sau khi cấp phát bộ nhớ bằng calloc hoặc malloc, kích thước bộ nhớ được cố định, nhưng chúng có thể được tăng hoặc giảm bằng cách sử dụng hàm realloc. Trong Java, các bộ sưu tập có thể được sử dụng để cấp phát bộ nhớ động.
Ưu điểm chính của cấp phát bộ nhớ động là nó tiết kiệm bộ nhớ. Người lập trình có thể cấp phát bộ nhớ hoặc giải phóng bộ nhớ khi cần thiết. Bộ nhớ có thể được phân bổ lại trong quá trình thực thi và có thể giải phóng bộ nhớ khi nó không được yêu cầu. Cấp phát bộ nhớ động cũng hiệu quả hơn cấp phát bộ nhớ tĩnh. Một nhược điểm là việc triển khai cấp phát bộ nhớ động rất phức tạp.
Điểm giống nhau giữa phân bổ bộ nhớ tĩnh và động là gì?
- Cả hai đều là cơ chế cấp phát bộ nhớ.
- Cả hai nên được lập trình viên thực hiện theo cách thủ công.
Sự khác biệt giữa phân bổ bộ nhớ tĩnh và động là gì?
Phân bổ bộ nhớ tĩnh so với động |
|
Cấp phát bộ nhớ tĩnh là một phương pháp cấp phát bộ nhớ và khi bộ nhớ được cấp phát, nó sẽ được sửa. | Cấp phát bộ nhớ động là một phương pháp cấp phát bộ nhớ và một khi bộ nhớ được cấp phát, nó có thể được thay đổi. |
Sửa đổi | |
Trong cấp phát bộ nhớ tĩnh, không thể thay đổi kích thước sau khi cấp phát ban đầu. | Trong phân bổ bộ nhớ động, bộ nhớ có thể được thu nhỏ hoặc tối đa cho phù hợp. |
Thực hiện | |
Cấp phát bộ nhớ tĩnh rất dễ thực hiện. | Cấp phát bộ nhớ động rất phức tạp để thực hiện. |
Tốc độ | |
Trong bộ nhớ tĩnh, thực thi cấp phát nhanh hơn cấp phát bộ nhớ động. | Trong bộ nhớ động, thực thi cấp phát chậm hơn cấp phát bộ nhớ tĩnh. |
Sử dụng bộ nhớ | |
Trong cấp phát bộ nhớ tĩnh, không thể sử dụng lại bộ nhớ không sử dụng. | Cấp phát bộ nhớ động cho phép sử dụng lại bộ nhớ. Lập trình viên có thể cấp phát thêm bộ nhớ khi được yêu cầu. Anh ấy có thể giải phóng bộ nhớ khi cần thiết. |
Tóm tắt - Phân bổ bộ nhớ tĩnh so với động
Trong lập trình, Cấp phát bộ nhớ tĩnh và cấp phát bộ nhớ động là hai cơ chế cấp phát bộ nhớ. Sự khác biệt giữa cấp phát bộ nhớ tĩnh và động là trong cấp phát bộ nhớ tĩnh một khi bộ nhớ được cấp phát, kích thước bộ nhớ được cố định trong khi cấp phát bộ nhớ động, khi bộ nhớ được cấp phát, kích thước bộ nhớ có thể được thay đổi. Lập trình viên có thể quyết định xem bộ nhớ nên tĩnh hay động tùy thuộc vào ứng dụng.
Tải xuống PDF Phân bổ bộ nhớ tĩnh và động
Bạn có thể tải xuống phiên bản PDF của bài viết này và sử dụng nó cho mục đích ngoại tuyến theo ghi chú trích dẫn. Vui lòng tải xuống phiên bản PDF tại đây: Sự khác biệt giữa phân bổ bộ nhớ tĩnh và động