කෙටියෙන්
ස්ථිතික මතක විබෙදුම සඳහා තොගයක් සහ ගතික මතක වෙන් කිරීම සඳහා ගොඩවල් භාවිතා කරයි, දෙකම පරිගණකයේ RAM තුළ ගබඩා කර ඇත.
විස්තරාත්මකව
තොගය
තොගය යනු "LIFO" (අවසාන වශයෙන්, පළමුවෙන්ම) දත්ත ව්යුහයකි, එය CPU විසින් තරමක් සමීපව කළමනාකරණය කර ප්රශස්ත කරනු ලැබේ. ශ්රිතයක් නව විචල්යයක් ප්රකාශයට පත් කරන සෑම අවස්ථාවකම එය “තල්ලු” කරනු ලැබේ. ශ්රිතයක් පිටවන සෑම අවස්ථාවකම, එම ශ්රිතය මඟින් තොගයට තල්ලු කරන ලද සියලු විචල්යයන් නිදහස් වේ (එනම් ඒවා මකා දමනු ලැබේ). සිරස් විචල්යයක් නිදහස් වූ පසු, එම මතක කලාපය වෙනත් සිරස් විචල්යයන් සඳහා ලබා ගත හැකිය.
විචල්යයන් ගබඩා කිරීම සඳහා තොගය භාවිතා කිරීමේ වාසිය නම්, මතකය ඔබ වෙනුවෙන් කළමනාකරණය කිරීමයි. ඔබට අතින් මතකය වෙන් කිරීමට අවශ්ය නැත, නැතහොත් ඔබට එය තවදුරටත් අවශ්ය නොවන විට එය නිදහස් කරන්න. එපමණක්ද නොව, CPU විසින් තොග මතකය ඉතා කාර්යක්ෂමව සංවිධානය කරන හෙයින්, විචල්යයන් කියවීම සහ ලිවීම ඉතා වේගවත් වේ.
තවත් බොහෝ දේ මෙහි සොයාගත හැකිය .
ගොඩවල්
සංචය යනු ඔබේ පරිගණකයේ මතකයේ කලාපයක් වන අතර එය ඔබ වෙනුවෙන් ස්වයංක්රීයව කළමනාකරණය නොවන අතර CPU විසින් තදින් කළමනාකරණය නොකෙරේ. එය මතකයේ වඩා නිදහස්-පාවෙන කලාපයකි (එය විශාල වේ). සංචය මත මතකය වෙන් කිරීම සඳහා, ඔබ විසින් C ශ්රිත ගොඩනගා ඇති malloc () හෝ calloc () භාවිතා කළ යුතුය. ඔබ සංචය මතකය වෙන් කළ පසු, ඔබට එම මතකය තවදුරටත් අවශ්ය නොවන විට එය අවලංගු කිරීමට නිදහස් () භාවිතා කිරීමේ වගකීම ඔබ සතුය.
ඔබ මෙය කිරීමට අපොහොසත් වුවහොත්, ඔබේ වැඩසටහනට මතක කාන්දුවක් ලෙස හැඳින්වේ. එනම්, ගොඩවල මතකය තවමත් පසෙකට දමනු ඇත (එය වෙනත් ක්රියාවලි සඳහා ලබා ගත නොහැක). නිදොස් කිරීමේ කොටසේ අප දකින පරිදි, මතක කාන්දු වීම හඳුනා ගැනීමට ඔබට උපකාර කළ හැකි Valgrind නම් මෙවලමක් තිබේ.
තොගය මෙන් නොව, ගොඩට විචල්ය ප්රමාණය මත ප්රමාණ සීමා නොමැත (ඔබේ පරිගණකයේ පැහැදිලි භෞතික සීමාවන් හැරුණු විට). ගොඩවල් මතකය කියවීමට හා ලිවීමට තරමක් මන්දගාමී වේ, මන්ද යත්, ගොඩවල මතකය වෙත ප්රවේශ වීම සඳහා යමෙකුට දර්ශක භාවිතා කළ යුතු බැවිනි. අපි ළඟදීම දර්ශකයන් ගැන කතා කරමු.
තොගයේ මෙන් නොව, සංචය මත සාදන ලද විචල්යයන් ඔබේ වැඩසටහනේ ඕනෑම තැනක සිට ඕනෑම ශ්රිතයකට ප්රවේශ විය හැකිය. ගොඩවල් විචල්යයන් ගෝලීය වශයෙන් විෂය පථයට අයත් වේ.
තවත් බොහෝ දේ මෙහි සොයාගත හැකිය .
තොගයේ වෙන් කර ඇති විචල්යයන් කෙලින්ම මතකයට ගබඩා කර ඇති අතර මෙම මතකයට ප්රවේශය ඉතා වේගවත් වන අතර, වැඩසටහන වෙන් කරන විට එහි ප්රතිපාදන සමඟ කටයුතු කරනු ලැබේ. ශ්රිතයක් හෝ ක්රමයක් වෙනත් ශ්රිතයක් කැඳවන විට එය වෙනත් ශ්රිතයක් ලෙස හැඳින්වේ. අවසාන ශ්රිතය එහි අගය ලබා දෙන තෙක් එම සියලු ශ්රිත ක්රියාත්මක කිරීම අත්හිටවනු ලැබේ. තොගය සැමවිටම LIFO අනුපිළිවෙලකට වෙන් කර ඇත, වඩාත්ම මෑතකදී වෙන් කර ඇති කොටස සෑම විටම නිදහස් කළ යුතු ඊළඟ කොටසයි. මෙය තොගයේ ලුහුබැඳීම සැබවින්ම සරල කරයි, තොගයෙන් කොටසක් නිදහස් කිරීම එක් දර්ශකයක් සැකසීමට වඩා වැඩි දෙයක් නොවේ.
ගොඩවල් මත වෙන් කර ඇති විචල්යයන් ඒවායේ මතකය ධාවන වේලාවට වෙන් කර ඇති අතර මෙම මතකයට ප්රවේශ වීම ටිකක් මන්දගාමී වේ, නමුත් ගොඩවල් ප්රමාණය සීමා වන්නේ අථත්ය මතකයේ ප්රමාණයෙන් පමණි. සංචයේ මූලද්රව්යයන් එකිනෙකා සමඟ පරායත්තතාවයක් නොමැති අතර ඕනෑම වේලාවක අහඹු ලෙස ප්රවේශ විය හැකිය. ඔබට ඕනෑම වේලාවක වාරණයක් වෙන් කර ඕනෑම වේලාවක එය නිදහස් කළ හැකිය. ඕනෑම වේලාවක ගොඩවල කුමන කොටස් වෙන් කර ඇත්ද යන්න පිළිබඳව සොයා බැලීම වඩාත් සංකීර්ණ කරයි.
සම්පාදනය කරන වේලාවට පෙර ඔබට කොපමණ දත්ත ප්රමාණයක් වෙන් කළ යුතුදැයි ඔබ හරියටම දන්නේ නම් ඔබට තොගය භාවිතා කළ හැකිය, එය විශාල නොවේ. ධාවන වේලාවේදී ඔබට කොපමණ දත්ත ප්රමාණයක් අවශ්ය දැයි ඔබ නොදන්නේ නම් හෝ ඔබට විශාල දත්ත ප්රමාණයක් වෙන් කිරීමට අවශ්ය නම් ඔබට ගොඩවල් භාවිතා කළ හැකිය.
බහු-නූල් තත්වයක් තුළ සෑම නූල් එකකටම සම්පූර්ණයෙන්ම ස්වාධීන තොගයක් ඇත, නමුත් ඒවා ගොඩවල් බෙදා ගනී. තොගය නූල් විශේෂිත වන අතර සංචය යෙදුම් විශේෂිත වේ. ව්යතිරේකය හැසිරවීමේදී සහ නූල් ක්රියාත්මක කිරීමේදී සලකා බැලිය යුතු කොටස වැදගත් වේ.
සෑම නූල් එකකටම තොගයක් ලැබෙන අතර, යෙදුම සඳහා සාමාන්යයෙන් ඇත්තේ එක ගොඩකි (විවිධ වර්ගවල වෙන් කිරීම් සඳහා බහු ගොඩවල් තිබීම සාමාන්ය දෙයක් නොවේ).
ධාවන වේලාවේදී, යෙදුමට වැඩි සංචයක් අවශ්ය නම්, එයට නිදහස් මතකයෙන් මතකය වෙන් කළ හැකි අතර, තොගයට මතකය අවශ්ය නම්, යෙදුම සඳහා නොමිලේ මතක වෙන් කළ මතකයෙන් මතකය වෙන් කළ හැකිය.
පවා, වැඩි විස්තර මෙහි සහ මෙහි දක්වා ඇත.
දැන් ඔබේ ප්රශ්නයේ පිළිතුරු වෙත එන්න .
මෙහෙයුම් පද්ධතිය හෝ භාෂා ධාවන කාලය මඟින් ඒවා කොතෙක් දුරට පාලනය වේද?
නූල් නිර්මාණය කරන විට මෙහෙයුම් පද්ධතිය එක් එක් පද්ධති මට්ටමේ නූල් සඳහා තොගය වෙන් කරයි. යෙදුම සඳහා ගොඩවල් වෙන් කිරීම සඳහා සාමාන්යයෙන් මෙහෙයුම් පද්ධතිය භාෂා ධාවන වේලාව මගින් හැඳින්වේ.
තවත් බොහෝ දේ මෙහි සොයාගත හැකිය .
ඔවුන්ගේ විෂය පථය කුමක්ද?
දැනටමත් ඉහළින් ලබා දී ඇත.
"සම්පාදනය කිරීමට පෙර ඔබට කොපමණ දත්ත ප්රමාණයක් වෙන් කළ යුතුදැයි ඔබ හරියටම දන්නේ නම් ඔබට තොගය භාවිතා කළ හැකිය. එය එතරම් විශාල නොවේ. ධාවන වේලාවේදී ඔබට කොපමණ දත්ත ප්රමාණයක් අවශ්ය දැයි ඔබ නොදන්නේ නම් ඔබට ගොඩවල් භාවිතා කළ හැකිය. ඔබට විශාල දත්ත ප්රමාණයක් වෙන් කිරීමට අවශ්යයි.
තවත් බොහෝ දේ මෙහි සොයාගත හැකිය .
එක් එක් ප්රමාණය තීරණය කරන්නේ කුමක් ද?
නූල් එකක් සෑදූ විට තොගයේ ප්රමාණය OS විසින් සකසා ඇත . යෙදුම් ආරම්භයේ දී සංචයේ ප්රමාණය සකසා ඇත, නමුත් අවකාශය අවශ්ය වන විට එය වර්ධනය විය හැකිය (විබෙදුම්කරු මෙහෙයුම් පද්ධතියෙන් වැඩි මතකයක් ඉල්ලා සිටී).
එකක් වේගවත් කරන්නේ කුමක් ද?
තොග වෙන් කිරීම වඩා වේගවත් බැවින් එය සැබවින්ම කරන්නේ තොග දර්ශකය ගෙනයාම පමණි. මතක තටාක භාවිතා කරමින්, ඔබට ගොඩවල් වෙන් කිරීමෙන් සැසඳිය හැකි කාර්ය සාධනයක් ලබා ගත හැකිය, නමුත් එය සුළු වශයෙන් එකතු වූ සංකීර්ණතාවයක් සහ එහි හිසරදයක් සමඟ පැමිණේ.
එසේම, ස්ටැක් එදිරිව ගොඩවල් කාර්ය සාධනය සලකා බැලීම පමණක් නොවේ; එය වස්තූන්ගේ අපේක්ෂිත ආයු කාලය ගැන ද ඔබට බොහෝ දේ කියයි.
විස්තර මෙතැනින් සොයාගත හැකිය .