Sự khác nhau giữa hàm malloc() và calloc()?

Điểm giống nhau giữa malloc() và calloc()

Cả 2 hàm malloc() và calloc() đều được sử dụng để cấp phát vùng nhớ động cho chương trình. Nếu cấp phát vùng nhớ thành công, hàm trả về con trỏ trỏ tới vùng nhớ được cấp phát. Hàm trả về NULL nếu không đủ vùng nhớ.

Hàm malloc() và calloc() trả về NULL trong các trường hợp sau:

  • Kích thước vùng nhớ cần cấp phát vượt quá kích thước vật lý của hệ thống
  • Tại thời điểm gọi hàm malloc() và calloc(), tạm thời không đủ vùng nhớ để cấp phát. Nhưng application có thể gọi lại nhiều lần malloc() và calloc() để cấp phát vùng nhớ thành công.

Điểm khác nhau giữa hàm malloc() và calloc()

malloc() calloc()
malloc viết tắt của memory allocation calloc viết tắt của contiguous allocation
malloc nhận 1 tham số truyền vào là số byte của vùng nhớ cần cấp phát calloc nhận 2 tham số truyền vào là số block và kích thước mỗi block (byte)
void *malloc(size_t n);

Hàm trả về con trỏ trỏ tới vùng nhớ nếu cấp phát thành công, trả về NULL nếu cấp phát fail

void *calloc(size_t n, size_t size);

Hàm trả về con trỏ trỏ tới vùng nhớ được cấp phát và vùng nhớ được khởi tạo bằng giá trị 0. Trả về NULL nếu cấp phát fail

Hàm malloc() nhanh hơn hàm calloc() Hàm calloc() tốn thêm thời gian khởi tạo vùng nhớ. Tuy nhiên, sự khác biệt này không đáng kể.

Ví dụ: Sử dụng malloc và calloc để cấp phát vùng nhớ

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


void main( void )
{
    int *p1, *p2;
    p1 = (int*)malloc(10*sizeof(int));
    if(p1)
        printf("\nmalloc() allocates memory successfully");        
    else
        printf("\nFail in allocate memory");

    p2 = (int*)calloc(10, sizeof(int));
    if(p2)
        printf("\ncalloc() allocates memory successfully");               
    else
        printf("\nFail in allocate memory");

    getch();
}

 

Be the first to comment

Leave a Reply