Như bạn đã biết, mảng là tập hợp của một số giá trị cố định. Khi kích thước của một mảng được khai báo, bạn không thể thay đổi nó
Đôi khi kích thước của mảng bạn khai báo có thể không đủ. Để giải quyết vấn đề này, bạn có thể cấp phát bộ nhớ theo cách thủ công trong thời gian chạy. Điều này được gọi là cấp phát bộ nhớ động trong lập trình C
Để cấp phát bộ nhớ động, các hàm thư viện được sử dụng là ptr = (float*) malloc(100 * sizeof(float));2, ptr = (float*) malloc(100 * sizeof(float));3, ptr = (float*) malloc(100 * sizeof(float));4 và ptr = (float*) malloc(100 * sizeof(float));5. Các hàm này được định nghĩa trong tệp tiêu đề ptr = (float*) malloc(100 * sizeof(float));6
C malloc()
Tên "malloc" là viết tắt của cấp phát bộ nhớ
Hàm ptr = (float*) malloc(100 * sizeof(float));2 dự trữ một khối bộ nhớ có số byte đã chỉ định. Và, nó trả về một con trỏ ptr = (float*) malloc(100 * sizeof(float));8 có thể được chuyển thành các con trỏ dưới mọi hình thức
Cú pháp của malloc()
ptr = (castType*) malloc(size);Ví dụ
ptr = (float*) malloc(100 * sizeof(float));Câu lệnh trên phân bổ 400 byte bộ nhớ. Đó là vì kích thước của ptr = (float*) malloc(100 * sizeof(float));9 là 4 byte. Và, con trỏ ptr giữ địa chỉ của byte đầu tiên trong bộ nhớ được cấp phát
Biểu thức dẫn đến một con trỏ ptr = (float*) malloc(100 * sizeof(float));00 nếu không thể cấp phát bộ nhớ
C calloc()
Tên "calloc" là viết tắt của phân bổ liền kề
Hàm ptr = (float*) malloc(100 * sizeof(float));2 cấp phát bộ nhớ và không khởi tạo bộ nhớ, trong khi hàm ptr = (float*) malloc(100 * sizeof(float));3 cấp phát bộ nhớ và khởi tạo tất cả các bit về 0
Cú pháp của calloc()
ptr = (float*) malloc(100 * sizeof(float));0Ví dụ
ptr = (float*) malloc(100 * sizeof(float));4Câu lệnh trên cấp phát không gian liền kề trong bộ nhớ cho 25 phần tử kiểu ptr = (float*) malloc(100 * sizeof(float));9
C miễn phí()
Bộ nhớ được cấp phát động được tạo bằng ptr = (float*) malloc(100 * sizeof(float));3 hoặc ptr = (float*) malloc(100 * sizeof(float));2 không tự giải phóng được. Bạn phải sử dụng rõ ràng ptr = (float*) malloc(100 * sizeof(float));5 để giải phóng không gian
Cú pháp miễn phí()
ptr = (float*) malloc(100 * sizeof(float));9Câu lệnh này giải phóng không gian được phân bổ trong bộ nhớ được trỏ bởi ptr = (float*) malloc(100 * sizeof(float));07
ví dụ 1. malloc() và miễn phí()
ptr = (float*) malloc(100 * sizeof(float));1đầu ra
ptr = (float*) malloc(100 * sizeof(float));2Ở đây, chúng tôi đã cấp phát bộ nhớ động cho n số của ptr = (float*) malloc(100 * sizeof(float));08
ví dụ 2. calloc() và miễn phí()
ptr = (float*) malloc(100 * sizeof(float));4đầu ra
ptr = (float*) malloc(100 * sizeof(float));2C realloc()
Nếu bộ nhớ được cấp phát động không đủ hoặc nhiều hơn yêu cầu, bạn có thể thay đổi kích thước của bộ nhớ được cấp phát trước đó bằng hàm ptr = (float*) malloc(100 * sizeof(float));4
Trong bài đăng này, chúng ta sẽ hiểu sự khác biệt giữa malloc và calloc
Malloc
Phương thức 'malloc' được sử dụng để gán một khối bộ nhớ khi nó được yêu cầu
Nó không xóa bộ nhớ
Nó chỉ khởi tạo bộ nhớ được cấp phát khi được yêu cầu rõ ràng
Nó phân bổ bộ nhớ của một 'kích thước' cụ thể
Kích thước này được truyền dưới dạng tham số cho nó
Kích thước này được phân bổ từ một đống
Nó thực hiện công việc của mình một cách nhanh chóng
Ví dụ
ptr = (float*) malloc(100 * sizeof(float));7Calloc
Nó gán bộ nhớ được yêu cầu cho nhiều khối
Bộ nhớ được phân bổ này được bắt đầu bằng 0
Việc khởi tạo về 0 này được thực hiện bằng phương thức ‘calloc’
Nó phân bổ bộ nhớ cho hoạt động cần thiết của một 'kích thước' cụ thể, tôi. e số * kích thước
'num' dùng để chỉ số lượng khối bộ nhớ
Nó chậm so với phương pháp 'malloc'