Sự khác biệt chính - calloc vs malloc
Trong lập trình, việc lưu trữ dữ liệu là rất cần thiết. Dữ liệu được lưu trữ trong bộ nhớ. Các vị trí bộ nhớ này được gọi là các biến. Mỗi biến có một kiểu cụ thể. Chúng có thể là số nguyên, số nổi, số đôi, ký tự, v.v. Cũng có những cấu trúc dữ liệu có thể lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Nó là một mảng. Người lập trình phải khai báo kích thước mảng. Nếu người lập trình giải mã một mảng các số nguyên cho năm phần tử, thì không thể gán giá trị cho một chỉ mục cao hơn kích thước đã khai báo. Phân bổ bộ nhớ là cố định và nó không thể thay đổi trong thời gian chạy. Phương pháp cấp phát bộ nhớ khác là cấp phát bộ nhớ động. Cấp phát bộ nhớ động giúp cấp phát nhiều bộ nhớ hơn khi được yêu cầu và giải phóng khi cần thiết. Tệp tiêu đề có bốn chức năng để cấp phát bộ nhớ động. calloc và malloc là hai hàm như vậy. Sự khác biệt chính giữa calloc và malloc là calloc phân bổ bộ nhớ và cũng khởi tạo các khối bộ nhớ được cấp phát bằng 0 trong khi malloc cấp phát bộ nhớ nhưng không khởi tạo bộ nhớ được cấp phát đó bằng 0. Việc truy cập nội dung trong calloc sẽ cho giá trị 0, nhưng malloc sẽ cho giá trị rác.
Calloc là gì?
Cấp phát bộ nhớ là quá trình cấp phát bộ nhớ cho các chương trình đang thực thi. Đôi khi cần thay đổi kích thước của bộ nhớ. Do đó, cấp phát bộ nhớ động được sử dụng. Nó được thực hiện bằng cách sử dụng con trỏ. Con trỏ là các biến tham chiếu giữ địa chỉ của một biến khác.
Hình 01: calloc và malloc
calloc là viết tắt của "phân bổ liền kề". Nó phân bổ nhiều khối bộ nhớ có cùng kích thước. Cú pháp cho calloc như sau. Nó có hai đối số. Chúng là số khối và kích thước của mỗi khối. Hàm calloc trả về một con trỏ void, do đó, một toán tử ép kiểu được sử dụng để trả về kiểu con trỏ theo kiểu dữ liệu được yêu cầu.
voidcalloc (size_t num, size_t size);
Tham khảo chương trình C đơn giản dưới đây.
bao gồm
bao gồm
int main () {
int ptr=(int) calloc (20, sizeof (int));
nếu (ptr==NULL) {
printf (“Bộ nhớ không được cấp phát”);
}
khác {
printf (“Bộ nhớ được cấp phát”);
}
trả về 0;
}
Theo chương trình trên, một khối bộ nhớ liền kề có thể chứa 20 phần tử được cấp phát. Mỗi sẽ có kích thước của một số nguyên. Sizeof (int) được sử dụng vì kiểu số nguyên thay đổi từ trình biên dịch sang trình biên dịch.
Nếu cấp phát bộ nhớ thành công, nó sẽ trả về địa chỉ cơ sở của khối bộ nhớ. Có nghĩa là con trỏ ptr bây giờ đang trỏ đến địa chỉ cơ sở của khối bộ nhớ đó. Tất cả các vùng được phân bổ được khởi tạo thành số không. Nó sẽ in thông báo Bộ nhớ được phân bổ. Nếu cấp phát bộ nhớ không thành công, nó sẽ trả về con trỏ null. Do đó, nó sẽ in thông báo Bộ nhớ không được cấp phát.
malloc là gì?
Hàm malloc được sử dụng để cấp phát số lượng byte cần thiết trong bộ nhớ. Cú pháp cho malloc như sau. Kích thước thể hiện bộ nhớ cần thiết tính bằng byte.
voidmalloc (size_t_size);
Hàm malloc trả về một con trỏ void, do đó, một toán tử ép kiểu được sử dụng để trả về kiểu con trỏ theo kiểu dữ liệu được yêu cầu.
Tham khảo chương trình C đơn giản dưới đây với hàm malloc.
bao gồm
bao gồm
int main () {
int ptr=(int) malloc (10sizeof (int));
nếu (ptr==NULL) {
printf (“Bộ nhớ không được cấp phát”);
}
khác {
printf (“Bộ nhớ được cấp phát”);
}
trả về 0;
}
Theo chương trình trên, khối bộ nhớ sẽ được cấp phát. Con trỏ trỏ đến địa chỉ bắt đầu của bộ nhớ được cấp phát. Con trỏ trả về được chuyển đổi thành kiểu số nguyên. Nếu bộ nhớ được cấp phát, nó sẽ in thông báo bộ nhớ được cấp phát. Nếu bộ nhớ không được cấp phát, một con trỏ null sẽ trả về. Do đó, thông báo không được cấp phát bộ nhớ sẽ được in.
Điểm giống nhau giữa calloc và malloc là gì?
- Cả hai hàm này đều được khai báo trong tệp tiêu đề. Đây là tệp tiêu đề thư viện tiêu chuẩn.
- Cả hai hàm đều được sử dụng để cấp phát bộ nhớ động.
- Con trỏ do calloc và malloc trả về phải được chuyển thành kiểu cụ thể.
- Khi cấp phát bộ nhớ thành công, cả hai hàm sẽ trả về một con trỏ có địa chỉ cơ sở của khối bộ nhớ.
- Nếu cấp phát bộ nhớ không thành công, con trỏ null sẽ được trả về.
Sự khác biệt giữa calloc và malloc là gì?
calloc vs malloc |
|
calloc là một hàm để cấp phát bộ nhớ động trong tệp tiêu đề stdlib.h của ngôn ngữ C, phân bổ một số byte cụ thể và khởi tạo chúng bằng 0. | malloc là một hàm để cấp phát bộ nhớ động trong tệp tiêu đề stdlib.h của ngôn ngữ C phân bổ một số byte cụ thể. |
Có nghĩa là | |
calloc là viết tắt của phân bổ liền kề. | malloc là viết tắt của cấp phát bộ nhớ. |
Cú pháp | |
calloc theo cú pháp tương tự như voidcalloc (size_t_num, size_t size); | malloc tuân theo cú pháp tương tự như voidmalloc (size_t_size);. |
Số đối số | |
calloc có hai đối số. Chúng là một số khối và kích thước của mỗi khối. | malloc nhận một đối số. Nó là một số byte. |
Tốc độ | |
calloc mất nhiều thời gian hơn malloc một chút. Đó là do thêm bước khởi tạo bộ nhớ được cấp phát bằng 0. | malloc nhanh hơn calloc. |
Tổng hợp - calloc vs malloc
Trong cấp phát bộ nhớ tĩnh, chúng ta sử dụng mảng, bộ nhớ được cố định. Nếu ít phần tử được lưu trữ, thì phần còn lại của bộ nhớ sẽ bị lãng phí. Nó cũng có thể gây ra lỗi khi bộ nhớ được cấp phát nhỏ hơn bộ nhớ cần thiết. Do đó, cấp phát bộ nhớ động được sử dụng. Trong ngôn ngữ C, calloc và malloc cung cấp phân bổ bộ nhớ động. Sự khác biệt giữa calloc và malloc là calloc phân bổ bộ nhớ và cũng khởi tạo các khối bộ nhớ được cấp phát bằng 0 trong khi malloc cấp phát bộ nhớ nhưng không khởi tạo các khối bộ nhớ bằng 0. Malloc nhận hai đối số trong khi calloc nhận hai đối số.
Tải xuống bản PDF của calloc vs malloc
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 các 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 calloc và malloc