การจัดสรรหน่วยความจำแบบไดนามิก
-
การจัดสรรหน่วยความจำในขณะที่ดำเนินการ (รันไทม์) เรียกว่าการจัดสรรหน่วยความจำแบบไดนามิก
-
ฟังก์ชัน calloc() และ malloc() รองรับการจัดสรรหน่วยความจำแบบไดนามิก
-
การจัดสรรพื้นที่หน่วยความจำแบบไดนามิกทำได้โดยใช้ฟังก์ชันเหล่านี้เมื่อค่าถูกส่งกลับโดยฟังก์ชันและกำหนดให้กับตัวแปรพอยน์เตอร์
-
ในกรณีนี้ ตัวแปรจะได้รับการจัดสรรก็ต่อเมื่อหน่วยโปรแกรมของคุณเริ่มทำงาน
-
มันใช้โครงสร้างข้อมูลที่เรียกว่าฮีปสำหรับการใช้การจัดสรรแบบไดนามิก
-
มีหน่วยความจำที่นำกลับมาใช้ใหม่ได้และสามารถเพิ่มหน่วยความจำได้เมื่อไม่ต้องการ
-
มีประสิทธิภาพมากขึ้น
-
ในรูปแบบการจัดสรรหน่วยความจำนี้ การดำเนินการจะช้ากว่าการจัดสรรหน่วยความจำแบบคงที่
-
สามารถปล่อยหน่วยความจำที่นี่ได้ตลอดเวลาระหว่างโปรแกรม
ตัวอย่าง
โปรแกรมต่อไปนี้คำนวณผลรวมของเลขคู่และเลขคี่ในชุดขององค์ประกอบโดยใช้ฟังก์ชันการจัดสรรหน่วยความจำแบบไดนามิก -
#include<stdio.h>
#include<stdlib.h>
void main(){
//Declaring variables, pointers//
int i,n;
int *p;
int even=0,odd=0;
//Declaring base address p using malloc//
p=(int *)malloc(n*sizeof(int));
//Reading number of elements//
printf("Enter the number of elements : ");
scanf("%d",&n);
/*Printing O/p -
We have to use if statement because we have to check if memory
has been successfully allocated/reserved or not*/
if (p==NULL){
printf("Memory not available");
exit(0);
}
//Storing elements into location using for loop//
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);
} ผลลัพธ์
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