So sánh Malloc và Calloc trong C

Thảo luận trong 'Kiến thức, kinh nghiệm lập trình' bắt đầu bởi nhatlectv, 23/1/18.

  1. nhatlectv

    nhatlectv Stanford - Nâng tầm tri thức Thành viên BQT

    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);

    [​IMG]

    [​IMG]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 ));

    [​IMG] 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));

    [​IMG]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.
     

Chia sẻ trang này