Cấp phát bộ nhớ động
- Cấp phát bộ nhớ tại thời điểm thực thi (run time) gọi là cấp phát động.
- Hàm
calloc()vàmalloc()hỗ trợ cấp phát động. - Không gian bộ nhớ được cấp phát động khi giá trị trả về từ hàm gán cho biến con trỏ.
- Biến chỉ được cấp phát khi đơn vị chương trình 활성 hóa.
- Sử dụng cấu trúc dữ liệu heap để triển khai cấp phát động.
- Có tái sử dụng bộ nhớ, có thể giải phóng khi không cần.
- Hiệu quả hơn.
- Thực thi chậm hơn cấp phát tĩnh.
- Bộ nhớ có thể giải phóng bất kỳ lúc nào trong chương trình.
Ví dụ
Chương trình tính tổng số chẵn và lẻ trong tập phần tử dùng cấp phát động:
#include<stdio.h> #include<stdlib.h> void main(){ //Khai báo biến, con trỏ// int i,n; int *p; int even=0,odd=0; //Khai báo địa chỉ cơ sở p dùng malloc// p=(int *)malloc(n*sizeof(int)); //Nhập số phần tử// printf("Enter the number of elements : "); scanf("%d",&n); /*In kết quả - dùng if để kiểm tra cấp phát thành công*/ if (p==NULL){ printf("Memory not available"); exit(0); } //Lưu phần tử vào vị trí// printf("The elements are : \n"); for(i=0;i<n;i++){ scanf("%d",p+i); } for(i=0;i<n;i++){ if(*(p+i)%2==0){ even=even+*(p+i); } else{ odd=odd+*(p+i); } } printf("The sum of even numbers is : %d\n",even); printf("The sum of odd numbers is : %d\n",odd); }
Kết quả
Enter the number of elements : 4 The elements are : 35 24 46 12 The sum of even numbers is : 82 The sum of odd numbers is : 35