டைனமிக் மெமரி ஒதுக்கீடு சி ++ உடன் எவ்வாறு செயல்படுவது?



இந்த கட்டுரை சி ++ இல் டைனமிக் மெமரி ஒதுக்கீட்டை ஆராய்கிறது, இது நிகழ்நேர வளங்களுக்கான உங்கள் நினைவக தேவைகளை கருத்தில் கொள்ள உதவும் ஒரு முக்கிய அம்சமாகும்.

சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு என்பது மிக முக்கியமான அம்சமாகும், இது நிகழ்நேர வளங்களின் தேவையை சமாளிக்க உங்கள் தேவைகளை கருத்தில் கொள்ள உதவுகிறது. இந்த கட்டுரையில் நாம் ஆராய்வோம் விரிவாக ஆய்வு. பின்வரும் சுட்டிகள் இந்த கட்டுரையில் விவரிக்கப்படும்,

எனவே சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு குறித்த இந்த கட்டுரையுடன் தொடங்குவோம்





டைனமிக் நினைவக ஒதுக்கீடு தேவையா?

ஒரு வாக்கியத்தை எழுத்துக்களின் வரிசையாக உள்ளிட விரும்புகிறோம், ஆனால் வரிசையில் தேவையான எழுத்துக்களின் எண்ணிக்கை குறித்து எங்களுக்குத் தெரியவில்லை.

இப்போது, ​​எழுத்துக்குறி வரிசையை அறிவிக்கும்போது, ​​விரும்பிய சரத்தின் அளவை விட சிறியதாக அதன் அளவைக் குறிப்பிடுகிறோம் என்றால், நாம் ஒரு பிழையைப் பெறுவோம், ஏனெனில் வரிசைக்கு ஒதுக்கப்பட்ட நினைவகத்தில் உள்ளீடு உள்ளீட்டு சரத்தின் அளவோடு ஒப்பிடும்போது குறைவாக இருக்கும். உள்ளீட்டு சரத்தின் அளவை விட அதன் அளவை பெரிதாகக் குறிப்பிட்டால், வரிசைக்கு நினைவகத்தில் ஒரு இடம் ஒதுக்கப்படும், இது விரும்பிய சரத்தின் அளவை விட மிகப் பெரியது, இதனால் தேவையில்லாமல் அதிக நினைவகத்தை தேவையற்ற முறையில் பயன்படுத்துகிறது.



மேலே உள்ள விஷயத்தில், தொகுக்கும் நேரம் வரை (கணினி குறியீட்டைத் தொகுக்கும் போது மற்றும் சரம் பயனரால் உள்ளீடு செய்யப்படும் வரை) வரிசையின் சரியான அளவைப் பற்றி எங்களுக்கு தெரியாது. அத்தகைய சந்தர்ப்பங்களில், நாங்கள் பயன்படுத்துகிறோம் புதியது ஆபரேட்டர்.

சி ++ இரண்டு unary ஆபரேட்டர்களை வரையறுக்கிறது புதியது மற்றும் அழி இயக்க நேரத்தில் நினைவகத்தை ஒதுக்கீடு மற்றும் ஒதுக்கீடு செய்யும் பணியை இது செய்கிறது. இந்த ஆபரேட்டர்கள் (புதிய மற்றும் நீக்கு) இலவச ஸ்டோர் மெமரி (ஹீப் மெமரி) மீது செயல்படுவதால், அவை இலவச ஸ்டோர் ஆபரேட்டர் என்றும் அழைக்கப்படுகின்றன. சுட்டிகள் சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு அமைப்புக்கு தேவையான ஆதரவை வழங்குகின்றன.

தொடக்கநிலைகளுக்கான சேல்ஸ்ஃபோர்ஸ் டெவலப்பர் பயிற்சி

டைனமிக் ஒதுக்கீட்டின் உதவியுடன், ஒரு நிரல் இயக்க நேரத்தில் நினைவகத்தைப் பெற முடியும்.



தொகுக்கும் நேரத்தில் உலகளாவிய மற்றும் உள்ளூர் மாறிகள் நினைவகத்திற்கு ஒதுக்கப்படுகின்றன. இருப்பினும், இயக்க நேரத்தில் எந்த உலகளாவிய அல்லது உள்ளூர் மாறிகளையும் சேர்க்க முடியாது. நிரல் ஒரு மாறுபட்ட நினைவகத்தைப் பயன்படுத்த வேண்டுமானால், இயக்க நேரத்தில், தேவைப்படும் போது நினைவகத்தை ஒதுக்க வேண்டும். நிச்சயமாக, இங்கே டைனமிக் ஒதுக்கீடு நடைமுறைகள் நோக்கத்திற்கு உதவும்.

நிலையான நினைவக ஒதுக்கீடு மற்றும் டைனமிக் நினைவக ஒதுக்கீடு ஆகியவற்றுக்கு இடையிலான வேறுபாடுகள்:

எந்த சி ++ நிரலுக்கும் பயன்படுத்தப்படும் அடிப்படை நினைவக கட்டமைப்பு இது:

நினைவகம் - டைனமிக் நினைவக ஒதுக்கீடு - எடுரேகா

இது போன்ற ஒரு படம் நமக்குத் தேவைப்படும்

நிலையான நினைவக ஒதுக்கீட்டிற்கும், டைனமிக் நினைவக ஒதுக்கீட்டிற்கான குவியலுக்கும் இந்த அடுக்கு பயன்படுத்தப்படுகிறது, இரண்டும் கணினியின் ரேமில் சேமிக்கப்படுகின்றன.

நிலையான நினைவக ஒதுக்கீடு நேரடியாக நினைவகத்தில் சேமிக்கப்படும் மற்றும் இந்த நினைவகத்திற்கான அணுகல் மிக வேகமாக இருக்கும் போது அடுக்கில் ஒதுக்கப்படும் மாறிகள், நிரல் தொகுக்கப்படும்போது அதன் ஒதுக்கீடு கையாளப்படுகிறது. ஒரு செயல்பாடு அல்லது ஒரு முறை மற்றொரு செயல்பாட்டை அழைக்கும் போது, ​​அது மற்றொரு செயல்பாட்டை அழைக்கும் மற்றும் பல, கடைசி செயல்பாடு அதன் மதிப்பை வழங்கும் வரை இந்த செயல்பாடுகளின் செயல்பாடுகள் இடைநிறுத்தப்படும். அடுக்கு எப்போதும் ஒரு LIFO (முதல் அவுட்டில் கடைசியாக) வரிசையில் சேமிக்கப்படுகிறது, மிக சமீபத்தில் ஒதுக்கப்பட்ட தொகுதி எப்போதும் விடுவிக்கப்படும் அடுத்த தொகுதி ஆகும். இது அடுக்கைக் கண்காணிக்க உதவுகிறது, அடுக்கிலிருந்து ஒரு தொகுதியை விடுவிப்பது ஒரு சுட்டிக்காட்டி சரிசெய்வதைத் தவிர வேறில்லை.

குவியலில் ஒதுக்கப்பட்ட மாறிகள் அவற்றின் நினைவகத்தை இயக்க நேரத்தில் ஒதுக்கும்போது டைனமிக் மெமரி ஒதுக்கீட்டைக் கொண்டுள்ளன. அடுக்கை ஒப்பிடும்போது இந்த நினைவகத்தை அணுகுவது சற்று மெதுவாக இருக்கும், ஆனால் குவியலின் அளவு மெய்நிகர் நினைவகத்தின் அளவால் மட்டுமே வரையறுக்கப்படுகிறது. குவியலின் உறுப்பு ஒருவருக்கொருவர் சார்புநிலைகளைக் கொண்டிருக்கவில்லை, எந்த நேரத்திலும் தோராயமாக அணுகலாம். நாம் எந்த நேரத்திலும் ஒரு தொகுதியை ஒதுக்கலாம் மற்றும் எந்த நேரத்திலும் அதை விடுவிக்கலாம். எந்த நேரத்திலும் குவியலின் எந்த பகுதிகள் ஒதுக்கப்படுகின்றன அல்லது ஒதுக்கப்படுகின்றன என்பதைக் கண்காணிப்பது இது கடினமாக்குகிறது.

சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு குறித்த இந்த கட்டுரையுடன் நகரும்

நினைவகத்தைப் பயன்படுத்துதல் புதியது முக்கிய சொல்

சி ++ இல் புதியது இயக்க நேரத்தில் நினைவகத்தை ஒதுக்க ஆபரேட்டர் பயன்படுத்தப்படுகிறது மற்றும் நினைவகம் பைட்டுகளில் ஒதுக்கப்படுகிறது. தி புதியது குவியலில் டைனமிக் மெமரி ஒதுக்கீட்டிற்கான கோரிக்கையை ஆபரேட்டர் குறிக்கிறது. போதுமான நினைவகம் கிடைத்தால் புதியது ஆபரேட்டர் நினைவகத்தைத் துவக்கி, புதிதாக ஒதுக்கப்பட்ட மற்றும் துவக்கப்பட்ட நினைவகத்தின் முகவரியை சுட்டிக்காட்டி மாறிக்குத் தருகிறது.

தொடரியல்:

datatype * pointer_name = புதிய தரவு வகை

உதாரணமாக:

int * ptr = new int // பின்வரும் இரண்டு வழிகளில் மாறும் ஒதுக்கீட்டில் நாம் ஒரு மாறியை அறிவிக்க முடியும். int * ptr = new int (10) int * ptr = new int {15} // வகை தரவு வகை நினைவகத்தின் ஒரு தொகுதி (ஒரு வரிசை) ஒதுக்க புதிய ஆபரேட்டர் பயன்படுத்தப்படுகிறது. int * ptr = new int [20] // மேற்கண்ட கூற்று தொடர்ச்சியாக 20 முழு எண்களுக்கு நினைவகத்தை மாறும் வகையில் வரிசைப்படுத்துகிறது மற்றும் ஒரு சுட்டிக்காட்டி வரிசையின் முதல் உறுப்புக்கு ‘ptr’ சுட்டிக்காட்டிக்கு அளிக்கிறது.

குறிப்பு : குவியலுக்கு ஒதுக்க போதுமான நினைவகம் இல்லையென்றால், புதிய கோரிக்கை விதிவிலக்கை எறிவதன் மூலம் தோல்வியைக் குறிக்கிறது std :: bad_alloc, புதிய ஆபரேட்டருடன் “நோத்ரோ” பயன்படுத்தப்படாவிட்டால், அது ஒரு NULL சுட்டிக்காட்டி தருகிறது. எனவே, நிரலில் பயன்படுத்துவதற்கு முன்பு புதியது உருவாக்கிய சுட்டிக்காட்டி மாறியை சரிபார்க்க இது ஒரு நல்ல நடைமுறை.

சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு குறித்த இந்த கட்டுரையுடன் நகரும்

நினைவகத்தைப் பயன்படுத்துதல் அழி முக்கிய சொல்:

குவியல் நினைவகம் ஒரு மாறி அல்லது வர்க்க பொருளுக்கு ஒதுக்கப்பட்டவுடன் புதியது திறவுச்சொல், அந்த நினைவக இடத்தைப் பயன்படுத்தி நாம் ஒதுக்கி வைக்கலாம் அழி முக்கிய சொல்.

தொடரியல்:

நீக்கு pointer_variable // இங்கே, pointer_variable என்பது புதியது உருவாக்கிய தரவு பொருளை சுட்டிக்காட்டும் சுட்டிக்காட்டி. நீக்கு [] pointer_variable // சுட்டிக்காட்டி-மாறியால் சுட்டிக்காட்டப்பட்ட மாறும் ஒதுக்கப்பட்ட வரிசை நினைவகத்தை விடுவிக்க, பின்வரும் நீக்குதல் வடிவத்தைப் பயன்படுத்துகிறோம்:

உதாரணமாக:

ptr ஐ நீக்கு [] ptr

குறிப்பு : பொருளின் அளவு அல்லது பொருளின் வாழ்நாள் என்பது நிரல் செயல்பாட்டின் போது பொருள் நினைவகத்தில் இருக்கும் நேரம். குவியல் நினைவக ஒதுக்கீடு ஒரு அடுக்கை விட மெதுவாக உள்ளது, ஏனெனில், குவியலில், நீங்கள் நினைவகத்தை ஒதுக்கக்கூடிய குறிப்பிட்ட வரிசை எதுவும் இல்லை, அதேசமயம் அடுக்கில் அது LIFO ஐப் பின்பற்றுகிறது.

சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு குறித்த இந்த கட்டுரையுடன் நகரும்

அணிகளை மாறும் ஒதுக்கீடு

டைனமிக் மெமரி ஒதுக்கீட்டின் கருத்தின் முக்கிய பயன்பாடு என்னவென்றால், ஒரு வரிசைக்கு நினைவகத்தை ஒதுக்குவதே அதன் அளவைக் குறிப்பிடுவதன் மூலம் அதை அறிவிக்க வேண்டும், ஆனால் அதைப் பற்றி உறுதியாக தெரியவில்லை.

அதன் பயன்பாட்டைப் புரிந்துகொள்ள ஒரு எடுத்துக்காட்டு பார்ப்போம்.

# பெயர்வெளியைப் பயன்படுத்துதல் std int main () {int len, sum = 0 cout<< 'Enter the no. of students in the class' <>len int * mark = new int [len] // டைனமிக் மெமரி ஒதுக்கீடு கோட்<< 'Enter the marks of each student' << endl for( int i = 0 i>* (மதிப்பெண்கள் + i)} க்கு (int i = 0 i

விளக்கம்:
இந்த எடுத்துக்காட்டில் முதலில் ஒரு வகுப்பில் உள்ள மாணவர்களின் எண்ணிக்கையை பயனரிடம் கேட்கிறோம், அதன் மதிப்பை லென் மாறியில் சேமிக்கிறோம். பின்னர் நாம் ஒரு முழு எண் வரிசையை அறிவித்து, இந்த அறிக்கையை பயன்படுத்தி லென் மாறியில் சேமிக்கப்பட்ட மதிப்புக்கு மாறும் வகையில் நினைவகத்தில் இடத்தை ஒதுக்குகிறோம் int * mark = new int [length] இதனால் இது 'நீளம் * (1 இன் அளவு) க்கு சமமான இடத்தை ஒதுக்குகிறது முழு)'. குறியீட்டின் மீதமுள்ளவை சுய விளக்கமளிக்கும்.

சி ++ இல் டைனமிக் மெமரி ஒதுக்கீடு குறித்த இந்த கட்டுரையுடன் நகரும்

பொருள்களுக்கான டைனமிக் மெமரி ஒதுக்கீடு

நாம் மாறும் பொருள்களையும் ஒதுக்கலாம்.

கட்டமைப்பாளருக்கு ஒரு பொருளைத் துவக்கப் பயன்படும் ஒரு சிறப்பு வகுப்பு உறுப்பினர் செயல்பாடு மற்றும் டிஸ்ட்ரக்டர் என்பது ஒரு வர்க்க உறுப்பினர் செயல்பாடாகும், இது பொருள் நோக்கத்திலிருந்து வெளியேறும் போதெல்லாம் அழைக்கப்படுகிறது.

பொருளுக்கு ஒதுக்கப்பட்ட நினைவகத்தை வெளியிட டிஸ்ட்ரக்டர் பயன்படுத்தப்படலாம். இது பின்வரும் நிபந்தனைகளில் அழைக்கப்படுகிறது.

  • ஒரு உள்ளூர் பொருள் நோக்கத்திற்கு வெளியே செல்லும் போது
  • உலகளாவிய பொருளைப் பொறுத்தவரை, வகுப்பின் பொருளுக்கு ஒரு சுட்டிக்காட்டிக்கு ஒரு ஆபரேட்டர் பயன்படுத்தப்படும்போது

பொருள்களுக்கு நினைவகத்தை மாறும் போது நாம் மீண்டும் சுட்டிகள் பயன்படுத்தலாம்.

பொருள்களின் வரிசையின் உதாரணத்தைப் பார்ப்போம்.

# பெயர்வெளியைப் பயன்படுத்துதல் வகுப்பு வகுப்பு சீரற்றது {பொது: சீரற்ற () out cout<< 'Constructor' << endl } ~Random() { cout << 'Destructor' << endl } } int main() { Random* a = new Random[3] delete [] a // Delete array return 0 } 

வெளியீடு:

விளக்கம்:

ரேண்டம் வகுப்பின் மூன்று பொருள்களுக்கு நினைவகத்தை ஒதுக்குவதால் கட்டமைப்பாளர் மூன்று முறை அழைக்கப்படுவார். இந்த ஒவ்வொரு பொருளின் போதும் டிஸ்ட்ரக்டர் மூன்று முறை அழைக்கப்படும். ‘ரேண்டம் * அ = புதிய ரேண்டம் [3]’ இந்த அறிக்கை எங்கள் பொருளின் மாறும் நினைவக ஒதுக்கீட்டிற்கு காரணமாகும்.

இவ்வாறு ‘டைனமிக் மெமரி ஒதுக்கீடு சி ++’ குறித்த இந்த கட்டுரையின் முடிவுக்கு வந்துள்ளோம். நீங்கள் மேலும் அறிய விரும்பினால், பாருங்கள் எடூரேகா, நம்பகமான ஆன்லைன் கற்றல் நிறுவனம். எடுரேகாவின் ஜாவா ஜே 2 இஇ மற்றும் எஸ்ஓஏ பயிற்சி மற்றும் சான்றிதழ் பாடநெறி, முக்கிய மற்றும் மேம்பட்ட ஜாவா கருத்தாக்கங்களுக்கும், ஹைபர்னேட் & ஸ்பிரிங் போன்ற பல்வேறு ஜாவா கட்டமைப்புகளுக்கும் பயிற்சி அளிக்க வடிவமைக்கப்பட்டுள்ளது.

ஜாவாவில் முட்டுக்கட்டை தடுப்பது எப்படி

எங்களுக்கு ஒரு கேள்வி கிடைத்ததா? தயவுசெய்து இந்த வலைப்பதிவின் கருத்துகள் பிரிவில் குறிப்பிடவும், விரைவில் நாங்கள் உங்களைத் தொடர்புகொள்வோம்.