Cấp phát bộ nhớ động trong C : Malloc và 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);
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));
Tùy theo mục đích sử dụng mà chúng ta sử dụng. Malloc khi không cần gán giá trị mặc định còn cần mặc định là 0 thì dùng Calloc.