Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

คุณหมายถึงอะไรโดยการจัดสรรหน่วยความจำแบบไดนามิกในการเขียนโปรแกรม C?


การจัดสรรหน่วยความจำแบบไดนามิก

  • การจัดสรรหน่วยความจำในขณะที่ดำเนินการ (รันไทม์) เรียกว่าการจัดสรรหน่วยความจำแบบไดนามิก

  • ฟังก์ชัน 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