← Trang chủ

Cấp phát bộ nhớ động trong C : Malloc hay Calloc

Cấp phát bộ nhớ động trong C : Malloc vs Calloc

Để cấp phát bộ nhớ động trong C, chúng ta có 2 cách:
1. void* malloc (size_t size);
2. void* calloc (size_t num, size_t size);

So sánh

Sử dụng

  • Khi sử dụng malloc phải tính toán kích thước vùng nhớ cần cấp phát trước rồi truyền vào cho malloc
  • Khi sử dụng calloc chỉ cần truyền vào số phần tử và kích thước 1 phần tử, thì calloc sẽ tự động tính toán và cấp phát vùng nhớ cần thiết

Ví dụ: Cấp phát mảng 10 phần tử kiểu int:

int *a = (int *) malloc( 10 * sizeof( int ));
int *b = (int *) calloc( 10, sizeof( int ));

Hiệu suất / Perfomance

malloc nhanh hơn so với calloc. Lý do là calloc ngoài việc có nhiệm vụ cấp phát vùng nhớ như malloc, nó còn phải gán giá trị cho tất cả các phần tử của vùng nhớ vừa cấp phát = 0

int *a = (int *) calloc(10, sizeof( int ));
tương đương với
int *b = (int *) malloc( 10 * sizeof( int ));
memset(b, 0, 10 * sizeof(int));

Sự an toàn

Sử dụng calloc an toàn hơn malloc vì sau khi khởi tạo vùng nhớ thì calloc sẽ khởi tạo vùng nhớ cấp phát = 0, còn vùng nhớ do malloc cấp phát vẫn chứa giá trị rác nên sẽ dễ gây ra lỗi nếu truy xuất tới vùn nhớ này trước khi gán cho nó một giá trị xác định.

Tác giả

Dung_Nguyen

Đăng vào

Bài viết gốc

Thông tin

Proudly published with Statinamic