C లో డైనమిక్ మెమరీ కేటాయింపు: malloc (), calloc () విధులు

మీరు సి డైనమిక్ మెమరీ కేటాయింపును నేర్చుకునే ముందు, అర్థం చేసుకుందాం:

C లో మెమరీ నిర్వహణ ఎలా పనిచేస్తుంది?

మీరు ప్రాథమిక డేటా రకాన్ని ఉపయోగించి వేరియబుల్‌ని ప్రకటించినప్పుడు, C కంపైలర్ స్వయంచాలకంగా వేరియబుల్ కోసం మెమరీ పూల్‌లో మెమరీ స్థలాన్ని కేటాయిస్తుంది స్టాక్ .

ఉదాహరణకు, ఫ్లోట్ వేరియబుల్ ప్రకటించినప్పుడు సాధారణంగా 4 బైట్‌లు (ప్లాట్‌ఫారమ్ ప్రకారం) పడుతుంది. మేము ఉపయోగించి ఈ సమాచారాన్ని ధృవీకరించవచ్చు పరిమాణం దిగువ ఉదాహరణలో చూపిన విధంగా ఆపరేటర్ | _+_ |

అవుట్‌పుట్ ఇలా ఉంటుంది: | _+_ |

అలాగే, పేర్కొన్న పరిమాణంతో ఒక శ్రేణిని మెమరీ యొక్క వరుస బ్లాక్స్‌లో కేటాయించారు, ప్రతి బ్లాక్ ఒక మూలకం కోసం పరిమాణాన్ని కలిగి ఉంటుంది: | _+_ |

ఫలితం: | _+_ |

ఇప్పటివరకు నేర్చుకున్నట్లుగా, ప్రాథమిక డేటా రకం లేదా శ్రేణిని ప్రకటించినప్పుడు, మెమరీ స్వయంచాలకంగా నిర్వహించబడుతుంది. ఏదేమైనా, C లో మెమరీని కేటాయించే ప్రక్రియ ఉంది, ఇది మీరు మీ ప్రోగ్రామ్ (రన్‌టైమ్) అమలు చేసే వరకు శ్రేణి పరిమాణం నిర్ణయించబడని ప్రోగ్రామ్‌ను అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ ప్రక్రియ అంటారు ' డైనమిక్ మెమరీ కేటాయింపు . '

ఈ ట్యుటోరియల్‌లో, మీరు నేర్చుకుంటారు-

C లో డైనమిక్ మెమరీ కేటాయింపు

డైనమిక్ మెమరీ కేటాయింపు మీ ప్రోగ్రామింగ్ అవసరాలకు అనుగుణంగా మాన్యువల్ కేటాయింపు మరియు మెమరీని విడిపించడం. డైనమిక్ మెమరీ నిర్వహించబడుతుంది మరియు మేము కుప్ప అని పిలిచే ప్రాంతంలో కొత్తగా కేటాయించిన మెమరీ స్థలాన్ని సూచించే పాయింటర్‌లతో అందించబడుతుంది.

ఇప్పుడు మీరు ఎటువంటి సమస్యలు లేకుండా రన్‌టైమ్‌లో డైనమిక్‌గా మూలకాల శ్రేణిని సృష్టించవచ్చు మరియు నాశనం చేయవచ్చు. సంగ్రహంగా చెప్పాలంటే, ఆటోమేటిక్ మెమరీ మేనేజ్‌మెంట్ స్టాక్‌ను ఉపయోగిస్తుంది మరియు సి డైనమిక్ మెమరీ కేటాయింపు కుప్పను ఉపయోగిస్తుంది.

లైబ్రరీలో డైనమిక్ మెమరీ నిర్వహణ బాధ్యత ఉంది.

ఫంక్షన్ ప్రయోజనం
మల్లోక్ () అభ్యర్థించిన పరిమాణం యొక్క మెమరీని కేటాయిస్తుంది మరియు కేటాయించిన స్థలం యొక్క మొదటి బైట్‌కు పాయింటర్‌ను అందిస్తుంది.
కాలోక్ () శ్రేణి మూలకాల కోసం స్థలాన్ని కేటాయిస్తుంది. మూలకాలను సున్నాకి ప్రారంభిస్తుంది మరియు మెమరీకి పాయింటర్‌ను అందిస్తుంది.
realloc () గతంలో కేటాయించిన మెమరీ స్పేస్ పరిమాణాన్ని సవరించడానికి ఇది ఉపయోగించబడుతుంది.
ఉచిత () గతంలో కేటాయించిన మెమరీ స్థలాన్ని ఖాళీ చేస్తుంది లేదా ఖాళీ చేస్తుంది.

వారి అప్లికేషన్‌తో పై విధులను చర్చిద్దాం

సి మల్లోక్ () ఫంక్షన్

C malloc () ఫంక్షన్ అంటే మెమరీ కేటాయింపు. ఇది మెమరీ బ్లాక్‌ను డైనమిక్‌గా కేటాయించడానికి ఉపయోగించే ఫంక్షన్. ఇది పేర్కొన్న పరిమాణంలో మెమరీ స్థలాన్ని రిజర్వ్ చేస్తుంది మరియు మెమరీ స్థానానికి సూచించే శూన్య పాయింటర్‌ను అందిస్తుంది. తిరిగి ఇచ్చే పాయింటర్ సాధారణంగా రకం శూన్యమైనది. దీని అర్థం మనం ఏదైనా పాయింటర్‌కు C malloc () ఫంక్షన్‌ను కేటాయించవచ్చు.

Malloc () ఫంక్షన్ యొక్క వాక్యనిర్మాణం: | _+_ |

ఇక్కడ,

  • ptr అనేది కాస్ట్_టైప్ యొక్క పాయింటర్.
  • C malloc () ఫంక్షన్ బైట్_సైజు కేటాయించిన మెమరీకి పాయింటర్‌ను అందిస్తుంది.

Malloc యొక్క ఉదాహరణ (): | _+_ |

ఈ ప్రకటన విజయవంతంగా అమలు చేయబడినప్పుడు, 50 బైట్ల మెమరీ స్పేస్ రిజర్వ్ చేయబడుతుంది. రిజర్వ్ చేసిన స్పేస్ యొక్క మొదటి బైట్ యొక్క అడ్రస్ రకం int యొక్క పాయింటర్ ptr కి కేటాయించబడింది.

మరొక ఉదాహరణను పరిశీలించండి: | _+_ |

అవుట్‌పుట్: | _+_ |

  1. అది గమనించండి పరిమాణం (*ptr) బదులుగా ఉపయోగించబడింది పరిమాణం (int) *ptr డిక్లరేషన్ తరువాత వేరే డేటా రకానికి టైప్ చేసినప్పుడు కోడ్‌ను మరింత దృఢంగా చేయడానికి.
  2. మెమరీ సరిపోకపోతే కేటాయింపు విఫలం కావచ్చు. ఈ సందర్భంలో, ఇది ఒక NULL పాయింటర్‌ను అందిస్తుంది. కాబట్టి, మీరు NULL పాయింటర్‌ని తనిఖీ చేయడానికి కోడ్‌ని చేర్చాలి.
  3. కేటాయించిన మెమరీ పక్కపక్కనే ఉందని గుర్తుంచుకోండి మరియు దీనిని శ్రేణిగా పరిగణించవచ్చు. బ్రాకెట్లను ఉపయోగించడం కంటే శ్రేణి మూలకాలను యాక్సెస్ చేయడానికి మేము పాయింటర్ అంకగణితాన్ని ఉపయోగించవచ్చు []. శ్రేణి మూలకాలను సూచించడానికి + ఉపయోగించమని మేము సలహా ఇస్తున్నాము ఎందుకంటే ఇంక్రిమెంటేషన్ ++ లేదా + = ఉపయోగించి పాయింటర్ ద్వారా నిల్వ చేయబడిన చిరునామా మారుతుంది.

మల్లోక్ () ఫంక్షన్‌ను క్యారెక్టర్ డేటా రకంతో పాటు స్ట్రక్చర్స్ వంటి క్లిష్టమైన డేటా రకాలతో కూడా ఉపయోగించవచ్చు.

ఉచిత () ఫంక్షన్

వేరియబుల్స్ కోసం మెమరీ కంపైల్ సమయంలో స్వయంచాలకంగా పరిష్కరించబడుతుంది. డైనమిక్ మెమరీ కేటాయింపులో, మీరు మెమరీని స్పష్టంగా గుర్తించాలి. పూర్తి చేయకపోతే, మీరు మెమరీ లోపం ఎదుర్కొనవచ్చు.

ఉచిత () ఫంక్షన్ C లో మెమరీని విడుదల చేయడానికి/డీలోకేట్ చేయడానికి పిలవబడుతుంది, మీ ప్రోగ్రామ్‌లో మెమరీని ఖాళీ చేయడం ద్వారా, మీరు తర్వాత ఉపయోగం కోసం మరింత అందుబాటులోకి తెస్తారు.

ఉదాహరణకు: | _+_ |

అవుట్‌పుట్ | _+_ |

సి కాలక్ () ఫంక్షన్

సి కాలక్ () ఫంక్షన్ అనేది వరుస కేటాయింపును సూచిస్తుంది. ఈ ఫంక్షన్ బహుళ మెమరీ బ్లాక్‌లను కేటాయించడానికి ఉపయోగించబడుతుంది. ఇది డైనమిక్ మెమరీ కేటాయింపు ఫంక్షన్, ఇది శ్రేణులు మరియు నిర్మాణాలు వంటి సంక్లిష్ట డేటా నిర్మాణాలకు మెమరీని కేటాయించడానికి ఉపయోగించబడుతుంది.

మలోక్ () ఫంక్షన్ మెమరీ స్పేస్ యొక్క ఒకే బ్లాక్‌ను కేటాయించడానికి ఉపయోగించబడుతుంది, అయితే C లోని కాలక్ () మెమరీ స్పేస్ యొక్క బహుళ బ్లాక్‌లను కేటాయించడానికి ఉపయోగించబడుతుంది. కాలోక్ () ఫంక్షన్ ద్వారా కేటాయించిన ప్రతి బ్లాక్ ఒకే పరిమాణంలో ఉంటుంది.

కాలోక్ యొక్క సింటాక్స్ () ఫంక్షన్: | _+_ |

  • పైన పేర్కొన్న స్టేట్‌మెంట్ అదే పరిమాణంలోని n మెమరీ బ్లాక్‌లను కేటాయించడానికి ఉపయోగించబడుతుంది.
  • మెమరీ స్థలాన్ని కేటాయించిన తర్వాత, అన్ని బైట్‌లు సున్నాకి ప్రారంభించబడతాయి.
  • కేటాయించిన మెమరీ స్పేస్ యొక్క మొదటి బైట్ వద్ద ప్రస్తుతం ఉన్న పాయింటర్ తిరిగి ఇవ్వబడింది.

మెమరీ కొరత వంటి మెమరీ స్థలాన్ని కేటాయించడంలో లోపం ఏర్పడినప్పుడు, అప్పుడు శూన్య పాయింటర్ తిరిగి ఇవ్వబడుతుంది.

కాలోక్ ఉదాహరణ ():

దిగువ ప్రోగ్రామ్ అంకగణిత శ్రేణి మొత్తాన్ని లెక్కిస్తుంది. | _+_ |

ఫలితం:

 #include int main() { float x; printf('The size of float is %d bytes', sizeof(x)); return 0;} 

calloc () వర్సెస్ malloc (): కీలక తేడాలు

కింది వాటి మధ్య కీలక వ్యత్యాసం ఉంది malloc () Vs కాల్లాక్ () సి లో:

కాలోక్ () ఫంక్షన్ సాధారణంగా మల్లోక్ () ఫంక్షన్ కంటే మరింత అనుకూలంగా మరియు సమర్థవంతంగా ఉంటుంది. మెమరీ స్థలాన్ని కేటాయించడానికి రెండు ఫంక్షన్‌లు ఉపయోగించబడుతున్నప్పటికీ, కాలోక్ () ఒకేసారి బహుళ బ్లాక్‌లను కేటాయించవచ్చు. మీరు ప్రతిసారీ మెమరీ బ్లాక్ కోసం అభ్యర్థించనవసరం లేదు. కాలోక్ () ఫంక్షన్ క్లిష్టమైన డేటా స్ట్రక్చర్‌లలో ఉపయోగించబడుతుంది, దీనికి పెద్ద మెమరీ స్థలం అవసరం.

C లో కేలోక్ () ద్వారా కేటాయించిన మెమరీ బ్లాక్ ఎల్లప్పుడూ సున్నాకి ప్రారంభించబడుతుంది, అయితే C లో ఫంక్షన్ malloc () లో, ఇది ఎల్లప్పుడూ చెత్త విలువను కలిగి ఉంటుంది.

సి రియల్‌లాక్ () ఫంక్షన్

సి ఉపయోగించి realloc () ఫంక్షన్, మీరు ఇప్పటికే కేటాయించిన మెమరీకి మరింత మెమరీ పరిమాణాన్ని జోడించవచ్చు. అసలు కంటెంట్‌ను అలాగే ఉంచేటప్పుడు ఇది ప్రస్తుత బ్లాక్‌ని విస్తరిస్తుంది. C లో realloc () అంటే మెమరీ యొక్క పునloస్థాపన.

realloc () గతంలో కేటాయించిన మెమరీ పరిమాణాన్ని తగ్గించడానికి కూడా ఉపయోగించవచ్చు.

రియల్‌లాక్ () ఫంక్షన్ యొక్క సింటాక్స్: | _+_ |

పై స్టేట్‌మెంట్ వేరియబుల్ న్యూస్‌సైజ్‌లో పేర్కొన్న పరిమాణంతో కొత్త మెమరీ స్థలాన్ని కేటాయిస్తుంది. ఫంక్షన్‌ను అమలు చేసిన తర్వాత, పాయింటర్ మెమరీ బ్లాక్ యొక్క మొదటి బైట్‌కు తిరిగి వస్తుంది. కొత్త పరిమాణం మునుపటి మెమరీ కంటే పెద్దది లేదా చిన్నది కావచ్చు. కొత్తగా కేటాయించిన బ్లాక్ మునుపటి మెమరీ బ్లాక్ ఉన్న ప్రదేశానికి సూచించబడుతుందని మేము ఖచ్చితంగా చెప్పలేము. ఈ ఫంక్షన్ కొత్త ప్రాంతంలో మునుపటి డేటాను కాపీ చేస్తుంది. డేటా సురక్షితంగా ఉంటుందని ఇది నిర్ధారిస్తుంది.

Realloc () యొక్క ఉదాహరణ: | _+_ |

C లోని రియల్‌లాక్ () విజయవంతం కాని ఆపరేషన్‌కు దారితీసినప్పుడల్లా, అది శూన్య పాయింటర్‌ను అందిస్తుంది మరియు మునుపటి డేటా కూడా విముక్తి చేయబడుతుంది.

C లో డైనమిక్ శ్రేణులు

C లోని డైనమిక్ అర్రే అవసరమైన విధంగా మూలకాల సంఖ్య పెరగడానికి అనుమతిస్తుంది. C డైనమిక్ అర్రే కంప్యూటర్ సైన్స్ అల్గోరిథంలలో విస్తృతంగా ఉపయోగించబడుతుంది.

కింది ప్రోగ్రామ్‌లో, మేము C | _+_ | లో డైనమిక్ శ్రేణిని సృష్టించాము మరియు పరిమాణాన్ని మార్చాము

స్క్రీన్‌లో సి డైనమిక్ అర్రే ప్రోగ్రామ్ ఫలితం: | _+_ |

సారాంశం

  • కుప్పలో అవసరమైన విధంగా మెమరీ బ్లాక్‌లను సృష్టించడం ద్వారా మనం మెమరీని డైనమిక్‌గా నిర్వహించవచ్చు
  • సి డైనమిక్ మెమరీ కేటాయింపులో, రన్ టైమ్‌లో మెమరీ కేటాయించబడుతుంది.
  • డైనమిక్ మెమరీ కేటాయింపు స్ట్రింగ్‌లు మరియు శ్రేణులను మార్చడానికి అనుమతిస్తుంది, దీని పరిమాణం సరళమైనది మరియు మీ ప్రోగ్రామ్‌లో ఎప్పుడైనా మార్చవచ్చు.
  • ఒక నిర్దిష్ట నిర్మాణం ఎంత మెమరీని ఆక్రమిస్తుందో మీకు తెలియనప్పుడు ఇది అవసరం.
  • C లో మల్లోక్ () అనేది డైనమిక్ మెమరీ కేటాయింపు ఫంక్షన్, ఇది మెమరీ కేటాయింపును సూచిస్తుంది, ఇది నిర్దిష్ట పరిమాణంతో మెమరీ బ్లాక్‌లను చెత్త విలువకు ప్రారంభించింది
  • C లో Calloc () అనేది ఒక మెమరీ కేటాయింపు ఫంక్షన్, ఇది 0 కి ప్రారంభించిన సమయంలో బహుళ మెమరీ బ్లాక్‌లను కేటాయిస్తుంది
  • పేర్కొన్న పరిమాణానికి అనుగుణంగా మెమరీని మళ్లీ కేటాయించడానికి C లోని Realloc () ఉపయోగించబడుతుంది.
  • డైనమిక్ కేటాయించిన మెమరీని క్లియర్ చేయడానికి ఉచిత () ఫంక్షన్ ఉపయోగించబడుతుంది.