Sự khác biệt giữa calloc và malloc

Sự khác biệt chính - calloc vs malloc

Trong lập trình, cần lưu trữ dữ liệu. Dữ liệu được lưu trữ trong bộ nhớ. Những vị trí bộ nhớ được gọi là biến. Mỗi biến có một loại cụ thể. Chúng có thể là số nguyên, số float, nhân đôi, ký tự, v.v. Ngoài ra còn có các cấu trúc dữ liệu có thể lưu trữ một bộ sưu tập tuần tự kích thước cố định của các phần tử cùng loại. Nó là một mảng. Các lập trình viên phải khai báo kích thước mảng. Nếu lập trình viên khai báo 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. Việc cấp phát bộ nhớ là cố định và không thể thay đổi khi chạy. Phương pháp cấp phát bộ nhớ khác là cấp phát bộ nhớ động. Phân bổ bộ nhớ động giúp phân bổ thêm bộ nhớ 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 chức năng như vậy. Các sự khác biệt chính giữa calloc và malloc là thế calloc cấp phát bộ nhớ và cũng khởi tạo các khối bộ nhớ được phân bổ về 0 trong khi malloc phân bổ bộ nhớ nhưng không khởi tạo bộ nhớ được phân bổ về 0. Truy cập nội dung trong calloc sẽ cho không, nhưng malloc sẽ cho giá trị rác.

NỘI DUNG

1. Tổng quan và sự khác biệt chính
2. Calloc là gì
3. Malloc là gì
4. Điểm tương đồng giữa calloc và malloc
5. So sánh cạnh nhau - calloc vs malloc ở dạng bảng
6. Tóm tắt

Calloc là gì?

Cấp phát bộ nhớ là quá trình gán bộ nhớ cho các chương trình thực thi. Đôi khi cần phải thay đổi kích thước của bộ nhớ. Do đó, phân bổ 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 biến khác.

Hình 01: calloc và malloc

Calloc là viết tắt của phân bổ liền kề trên mạng. Nó phân bổ nhiều khối bộ nhớ với cùng kích thước. Cú pháp của calloc như sau. Phải mất 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 đó toán tử cast được sử dụng để trả về kiểu con trỏ theo kiểu dữ liệu cần thiết.

        void * calloc (size_t num, size_t size);

Tham khảo chương trình C đơn giản dưới đây.

#incolee

#incolee

int chính ()

int ptr * = (int *) calloc (20, sizeof (int));

if (ptr == NULL)

printf (Bộ nhớ trong không được cấp phát);

khác

printf (Bộ nhớ được phân bổ trên mạng);

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 phân bổ. Mỗi cá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ớ. Nó có nghĩa là con trỏ ptr hiện đang trỏ đến địa chỉ cơ sở của khối bộ nhớ đó. Tất cả các khu vực được phân bổ được khởi tạo thành số không. Nó sẽ in thông báo Phân bổ bộ nhớ. Nếu việc cấp phát bộ nhớ không thành công, nó sẽ trả về con trỏ null. Do đó, nó sẽ in Bộ nhớ không được cấp phát tin nhắn.

Malloc là gì?

Hàm malloc được sử dụng để phân bổ số lượng byte cần thiết trong bộ nhớ. Cú pháp cho malloc như sau. Kích thước đại diện cho bộ nhớ cần thiết theo byte.

        void * malloc (size_t_size);

Hàm malloc trả về một con trỏ rỗng, do đó toán tử cast được sử dụng để trả về kiểu con trỏ theo kiểu dữ liệu cần thiết.

Tham khảo chương trình C đơn giản dưới đây với chức năng malloc.

#incolee

#incolee

int chính ()

int ptr * = (int *) malloc (10 * sizeof (int));

if (ptr == NULL)

printf (Bộ nhớ trong không được cấp phát);

khác

printf (Bộ nhớ được phân bổ trên mạng);

trả về 0;

Theo chương trình trên, khối bộ nhớ sẽ được phân bổ. Con trỏ trỏ đến địa chỉ bắt đầu của bộ nhớ được phân bổ. Con trỏ trả về được chuyển đổi thành một kiểu số nguyên. Nếu bộ nhớ được phân bổ, nó sẽ in bộ nhớ được phân bổ tin nhắn. Nếu bộ nhớ không được cấp phát, một con trỏ null sẽ trở lại. Do đó, bộ nhớ không được phân bổ tin nhắn sẽ in.

Điểm tương đồng giữa calloc và malloc là gì?

  • Cả hai chức năng này được khai báo trong tệp tiêu đề. Đây là tệp tiêu đề thư viện chuẩn.
  • Cả hai chức năng được sử dụng để cấp phát bộ nhớ động.
  • Con trỏ được trả về bởi calloc và malloc nên được đúc thành loại 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 việc cấp phát bộ nhớ không thành công, một 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 về 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ể.
 Ý nghĩa
Calloc là viết tắt của phân bổ liền kề. malloc là viết tắt của phân bổ bộ nhớ.
Cú pháp
calloc theo một cú pháp tương tự void * calloc (size_t_num, size_t size); malloc theo một cú pháp tương tự void * malloc (size_t_size);.
 Số lượng đố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 có một đối số. Nó là một số byte.
Tốc độ
calloc mất ít thời gian hơn malloc. Đó là do bước bổ sung khởi tạo bộ nhớ được phân bổ bằng 0. malloc nhanh hơn calloc.

Tóm tắt - calloc vs malloc

Trong phân bổ bộ nhớ tĩnh như chúng ta sử dụng mảng, bộ nhớ được cố định. Nếu một vài 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 phân bổ nhỏ hơn bộ nhớ cần thiết. Do đó, phân bổ 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 phân bổ về 0 trong khi malloc phân bổ bộ nhớ nhưng không khởi tạo các khối bộ nhớ về 0. Malloc có hai đối số trong khi calloc có 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 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

Tài liệu tham khảo:

1.Kumar, Krishan. Sự khác biệt giữa những người khác nhau giữa Malloc và Calloc ở C. Cs-Fundamentals.com, Cs-Fundamentals.com. Có sẵn ở đây  
2. Phân bổ bộ nhớ động C. Wikipedia, Wikimedia Foundation, ngày 13 tháng 1 năm 2018. Có sẵn tại đây 
3. Call Calloc () so với malloc (). GeekforGeek, 14 tháng 6 năm 2017. Có sẵn tại đây