சி இல் மல்லாக் செயல்பாட்டை எவ்வாறு பயன்படுத்துவது

How Use Malloc Function C



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

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

தொடரியல்:







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



ஏன் வெற்றிட சுட்டிகள்:

மல்லோக்கிற்கு அது எதைச் சுட்டிக்காட்டுகிறது என்ற யோசனை இல்லை; அந்த நினைவக இடத்தில் எந்த தரவு சேமிக்கப்படும் என்று அது தெரியாது என்று அர்த்தம். நினைவகத்தில் சேமிக்கப்படும் தரவின் வகை தெரியாமல் பயனர் கோரிய நினைவகத்தை இது ஒதுக்குகிறது. அதனால்தான் அது ஒரு வெற்றிட சுட்டியைத் தருகிறது.



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





வெற்றிபெறும் மல்லோக் வெற்றிடத்தைக் காட்டினால், இப்போது 6 பைட்டுகள் நினைவகத்தை ஒதுக்குமாறு நாங்கள் மல்லோக்கைக் கேட்கிறோம். அந்த வழக்கில், நாம் அதை ஒரு முழு எண் வகை சுட்டிக்காட்டிக்கு தட்டச்சு செய்ய வேண்டும், ஏனென்றால் அந்த நினைவகத்தில் ஒரு முழு எண்ணை சேமிக்க விரும்புகிறோம். இங்கே malloc 6 பைட்டுகள் நினைவகத்தை ஒரு குவியலாக ஒதுக்குகிறது, மேலும் முதல் பைட்டின் முகவரி சுட்டிக்காட்டி ptr இல் சேமிக்கப்படுகிறது.



எடுத்துக்காட்டு திட்டம்:

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

இங்கே நீங்கள் printf செயல்பாட்டைப் பார்க்க முடியும், நான் முழு எண்ணின் எண்ணிக்கையை உள்ளிடுமாறு பயனரிடம் கேட்கிறேன். I மற்றும் n க்கு மேலே இரண்டு மாறிகள் அறிவித்துள்ளோம். மாறி n என்பது பயனர் உள்ளிட்ட எண்ணை நாம் சேமித்து வைக்கும் இடம். அதன் பிறகு, எங்களிடம் மல்லாக் செயல்பாடு உள்ளது; n முழு எண்களின் அளவிற்கு சமமான அளவை malloc ஒதுக்க வேண்டும் என்று நாங்கள் விரும்புகிறோம். நாம் n உடன் int என்றால் அளவைப் பெருக்கிக் கொள்கிறோம்; இது நமக்கு n முழு எண்களின் அளவைக் கொடுக்கும். அதன் பிறகு, malloc ஒரு வெற்றிட சுட்டியைத் தரும், மேலும் நாம் அதை ஒரு முழு எண் சுட்டிக்காட்டிக்கு தட்டச்சு செய்கிறோம், மேலும் நாங்கள் முகவரியை ptr சுட்டிக்காட்டிக்குள் சேமித்து வைக்கிறோம். டைப் காஸ்டிங் முக்கியமானது, ஏனெனில் இது ஒரு நல்ல நடைமுறை.

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

லூப் 0 முதல் n-1 வரை இயங்கும், மேலும் ஒவ்வொரு முறையும் முழு எண்ணை ஒவ்வொன்றாக உள்ளிடுமாறு பயனரிடம் கேட்போம். ஸ்கேன்ஃப் செயல்பாட்டிற்குள், ptr+i என்று எழுதப்பட்ட ஒன்று உள்ளது, ஏனெனில் ptr நினைவகத்தின் முதல் பைட்டின் முகவரியைக் கொண்டுள்ளது. முகவரி இங்கே 1000 என்று சொன்னால் நான் முதலில் பூஜ்ஜியத்திற்கு சமம் அதனால் 1000+0 1000 ஆகிறது அதனால் அந்த முகவரிக்குள் நமது முதல் முழு எண் சேமிக்கப்படும், அதன் பிறகு நான் 1 ஆகும்போது 1000+1 என உள்நாட்டில் விளங்கப்படும் (1000) +1 *4 முழு எண்ணின் அளவு 4 பைட்டுகள் என்று நான் கருதினால், அது 1004 க்கு சமமாக இருக்கும், எனவே அடுத்த முழு எண் 1004 இடத்திற்குள் சேமிக்கப்படும். முகவரிகள் 1000, 1004, 1008 போன்ற முகவரிகள் இப்படித்தான் தொடரும். நாம் ptr+i க்கு முன் ampersand ஐப் பயன்படுத்துவதில்லை, ஏனென்றால் ptr எழுதும் போது ptr ஏற்கனவே முகவரியைக் கொடுக்கிறது, இது வெறுமனே ஒரு சுட்டிக்காட்டி ஆகும், மேலும் அதில் முகவரி, மதிப்பு இல்லை, எனவே அதற்கு முன் ampersand வைப்பதற்கான தேவை இல்லை, மற்றும் இந்த கருத்து தெளிவாக இருக்க வேண்டும்.

இங்கே இந்த வளையத்தில், திரையில் அனைத்து முழு எண்களையும் அச்சிடும் ஒரு காரியத்தை நாங்கள் செய்கிறோம்; வெளிப்படையாக, நாங்கள் ptr+i ஐப் பயன்படுத்துகிறோம், ஆனால் இங்கே, இந்த விஷயத்தில், ptr+i என்பது ஒரு முகவரியைக் குறிக்கும் என்பதால், அதை நாம் குறைத்து மதிப்பிட வேண்டும். நான் 0 க்கு சமமாக இருந்தால், அது 1000 ஆக இருக்கும், ஏனென்றால் முதல் முகவரி 1000 ஆக இருக்கும் என்று நாங்கள் கருதுகிறோம், எனவே நாங்கள் அதை விலக்குகிறோம்; நாம் முதல் முழு எண்ணைப் பெறுவோம், பின்னர் நான் 1 க்கு சமம், அது 1001 ஆக மாறும் ஆனால் முழு எண்ணின் அளவு 4. மீண்டும் இருந்தால் 1004 என விளக்கப்படுகிறது. நாங்கள் அதை விலக்குகிறோம், எனவே அது எங்களுக்கு 2 ஐக் கொடுக்கும்ndமுழு. இந்த வழியில், எல்லாம் வேலை செய்கிறது.

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

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

முடிவுரை:

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

மகிழ்ச்சியாக மாறும் நினைவக ஒதுக்கீடு!