එය විය හැක්කේ කෙසේද? දේශීය විචල්යයක මතකය එහි ක්රියාකාරීත්වයට පිටතින් ප්රවේශ විය නොහැකිද?
ඔබ හෝටල් කාමරයක් කුලියට ගන්නවා. ඔබ ඇඳ අසල මේසයේ ඉහළ ලාච්චුවේ පොතක් තබා නින්දට යන්න. ඔබ පසුදා උදෑසන පරීක්ෂා කර බලන්න, නමුත් ඔබේ යතුර ආපසු ලබා දීමට "අමතක කරන්න". ඔබ යතුර සොරකම් කළා!
සතියකට පසු, ඔබ නැවත හෝටලයට පැමිණ, පරීක්ෂා නොකරන්න, ඔබේ සොරකම් කළ යතුර සමඟ ඔබේ පැරණි කාමරයට ගොස්, ලාච්චුවේ බලන්න. ඔබේ පොත තවමත් පවතී. පුදුමයි!
එය කෙසේ විය හැකිද? ඔබ කාමරය කුලියට ගෙන නොමැතිනම් හෝටල් කාමර ලාච්චුවක අන්තර්ගතය ප්රවේශ කළ නොහැකිද?
හොඳයි, පැහැදිලිවම එම තත්වය සැබෑ ලෝකයේ සිදුවිය හැකි කිසිදු ගැටළුවක් නැත. ඔබට තවදුරටත් කාමරයේ සිටීමට අවසර නොමැති විට ඔබේ පොත අතුරුදහන් වීමට හේතු වන අද්භූත බලයක් නොමැත. සොරකම් කළ යතුරක් සහිත කාමරයකට ඇතුළු වීම වළක්වන අද්භූත බලවේගයක් ද නැත.
ඔබේ පොත ඉවත් කිරීමට හෝටල් කළමනාකරණය අවශ්ය නොවේ . ඔබ ඔවුන් සමඟ ගිවිසුමක් ඇති කර නොගත් අතර, ඔබ දේවල් අතහැර දැමුවහොත්, ඔවුන් ඔබ වෙනුවෙන් එය ඉරා දමනු ඇත. සොරකම් කරන ලද යතුරක් සමඟ එය නැවත ලබා ගැනීම සඳහා ඔබ නීති විරෝධී ලෙස ඔබේ කාමරයට ඇතුළු වන්නේ නම්, හෝටල් ආරක්ෂක කාර්ය මණ්ඩලය එසේ නොවේ ඔබව හොර රහසේ අල්ලා ගැනීම අවශ්ය . ඔබ ඔවුන් සමඟ ගිවිසුමක් ඇති කර නොගත්තේ “මම නැවත මගේ ඇතුළට යාමට උත්සාහ කළහොත් කාමරයට පසුව, ඔබ මාව නවත්වන්න අවශ්යයි. ඒ වෙනුවට, ඔබ ඔවුන් සමඟ ගිවිසුමක් අත්සන් කළ අතර, “මම පසුව මගේ කාමරයට නොයන බවට පොරොන්දු වෙමි”, ඔබ කඩ කළ ගිවිසුමක් .
මෙම තත්වය තුළ ඕනෑම දෙයක් සිදුවිය හැකිය . පොත එහි තිබිය හැකිය - ඔබ වාසනාවන්තයි. වෙනත් කෙනෙකුගේ පොතක් එහි තිබිය හැකි අතර ඔබේ හෝටලයේ උදුනෙහි තිබිය හැකිය. ඔබ ඇතුළට එන විට ඔබේ පොත කැබලිවලට ඉරා දැමිය හැකිය. හෝටලයට මේසය සහ පොත් සම්පූර්ණයෙන්ම ඉවත් කර එය වෙනුවට ඇඳුම් ආයිත්තම් කට්ටලයක් ආදේශ කළ හැකිය. මුළු හෝටලයම කඩා දමා පාපන්දු ක්රීඩාංගනයක් වෙනුවට විය හැකි අතර, ඔබ වටේට හොරෙන් යන අතරතුර පිපිරුමකින් ඔබ මිය යනු ඇත.
සිදුවන්නේ කුමක්දැයි ඔබ දන්නේ නැත; ඔබ හෝටල් ක් පරීක්ෂා හා නීති විරෝධී ලෙස පසුව පාවිච්චි කිරීම සඳහා ප්රධාන සොරකම් විට, ඔබ නිසා අනාවැකි හැකි, ආරක්ෂිත ලෝකයේ ජීවත් වීමට අයිතිය අත්හැර ඔබ පද්ධතියේ නීති බිඳ දැමීම සඳහා තෝරා ගත්තේය.
C ++ ආරක්ෂිත භාෂාවක් නොවේ . එය පද්ධතියේ නීති කඩ කිරීමට සතුටු සිතින් ඔබට ඉඩ සලසයි. ඔබට අවසර නැති කාමරයකට ගොස් නැවත එහි නොසිටින මේසයක් හරහා කටකතා පෑම වැනි නීති විරෝධී හා මෝඩ දෙයක් කිරීමට ඔබ උත්සාහ කරන්නේ නම්, C ++ ඔබව නවත්වන්නේ නැත. C ++ ට වඩා ආරක්ෂිත භාෂාවන් ඔබගේ බලය සීමා කිරීමෙන් මෙම ගැටළුව විසඳයි - උදාහරණයක් ලෙස යතුරු මත දැඩි පාලනයක් තබා ගැනීමෙන්.
යාවත්කාලීන කරන්න
ශුද්ධ වූ යහපත්කම, මෙම පිළිතුර විශාල අවධානයක් ලබා ගනී. (ඒ මන්දැයි මට විශ්වාස නැත - මම එය "විනෝදජනක" කුඩා ප්රතිසමයක් ලෙස සලකමි, නමුත් කුමක් වුවත්.)
තවත් තාක්ෂණික සිතුවිලි කිහිපයක් සමඟ මෙය ටිකක් යාවත්කාලීන කිරීම ජර්මානු විය හැකි යැයි මම සිතුවෙමි.
සම්පාදකයින් එම වැඩසටහන මඟින් හසුරුවන ලද දත්ත ගබඩා කිරීම කළමනාකරණය කරන කේත ජනනය කිරීමේ ව්යාපාරයේ යෙදී සිටිති. මතකය කළමනාකරණය කිරීම සඳහා කේත ජනනය කිරීමේ විවිධ ක්රම රාශියක් ඇත, නමුත් කාලයත් සමඟ මූලික තාක්ෂණික ක්රම දෙකක් මුල් බැස තිබේ.
පළමුවැන්න නම්, ගබඩාවේ එක් එක් බයිටයේ "ජීවිත කාලය" - එනම් යම් වැඩසටහන් විචල්යයක් සමඟ වලංගු ලෙස සම්බන්ධ වී ඇති කාල සීමාව - යම් ආකාරයක "දිගුකාලීන" ගබඩා ප්රදේශයක් තිබීමයි. කාලය. සම්පාදකයා විසින් "ගොඩවල් කළමණාකරුවෙකු" වෙත ඇමතුම් ජනනය කරන අතර එය අවශ්ය විටෙක ගබඩා කිරීම ගතිකව වෙන් කරන්නේ කෙසේදැයි දන්නා අතර එය තවදුරටත් අවශ්ය නොවන විට එය නැවත ලබා ගනී.
දෙවන ක්රමය නම්, එක් එක් බයිටයේ ආයු කාලය හොඳින් දන්නා “කෙටි කාලීන” ගබඩා ප්රදේශයක් තිබීමයි. මෙන්න, ජීවිත කාලය “කූඩු” රටාවක් අනුගමනය කරයි. මෙම කෙටිකාලීන විචල්යයන්ගෙන් දීර්-කාලීනව වෙනත් කෙටි කාලීන විචල්යයන්ට පෙර වෙන් කරනු ලබන අතර එය අවසන් වරට නිදහස් වනු ඇත. කෙටි කාලීන විචල්යයන් දීර්-කාලයක් ජීවත් වූ පසු වෙන් කරනු ලබන අතර ඒවා ඉදිරියේ නිදහස් වනු ඇත. මෙම කෙටි කාලීන විචල්යයන්ගේ ආයු කාලය දීර් ed කාලයක් ජීවත් වන අයගේ ජීවිත කාලය තුළ “කැදැල්ල” වේ.
දේශීය විචල්යයන් පසු රටාව අනුගමනය කරයි; ක්රමයක් ඇතුළත් කළ විට, එහි දේශීය විචල්යයන් සජීවීව පැමිණේ. එම ක්රමය වෙනත් ක්රමයක් ලෙස හැඳින්වූ විට, නව ක්රමයේ දේශීය විචල්යයන් සජීවීව පැමිණේ. පළමු ක්රමයේ දේශීය විචල්යයන් මිය යාමට පෙර ඔවුන් මිය යනු ඇත. දේශීය විචල්යයන් හා සම්බන්ධ ගබඩා වල ආයු කාලය ආරම්භයේ හා අවසානයෙහි සාපේක්ෂ අනුපිළිවෙල කලින් කලට සකස් කළ හැකිය.
මේ හේතුව නිසා, දේශීය විචල්යයන් සාමාන්යයෙන් "තොග" දත්ත ව්යුහයක් මත ගබඩා කිරීමක් ලෙස ජනනය වේ, මන්ද යත්, තොගයක් එහි ඇති දේ මත ඇති බැවින් එය මතට තල්ලු කරන ලද පළමු දෙය අවසන් වරට ඉවත් වනු ඇත.
එය හරියට හෝටලය අනුපිළිවෙලින් කාමර කුලියට ගැනීමට පමණක් තීරණය කරන අතර, ඔබ පරීක්ෂා කර බැලීමට වඩා කාමර අංකයක් ඇති සෑම කෙනෙකුටම ඔබට පරීක්ෂා කළ නොහැක.
ඒ නිසා අපි තොගය ගැන සිතමු. බොහෝ මෙහෙයුම් පද්ධති වලදී ඔබට එක් නූලකට එක් තොගයක් ලැබෙන අතර තොගය නිශ්චිත ස්ථාවර ප්රමාණයක් ලෙස වෙන් කරනු ලැබේ. ඔබ ක්රමයක් අමතන විට, දේවල් තොගයට තල්ලු කරනු ලැබේ. මුල් පෝස්ටරය මෙහි දැක්වෙන පරිදි, ඔබ ඔබේ ක්රමයෙන් බැහැරව නැවත තොගයට යොමු කළහොත්, එය සම්පූර්ණයෙන්ම වලංගු මිලියනයක බයිට් මතක කොටසක මැදට යොමු කිරීමකි. අපගේ ප්රතිසමයට අනුව, ඔබ හෝටලයෙන් පිටතට යන්න; ඔබ එසේ කරන විට, ඔබ වැඩිම සංඛ්යාවක් වාඩිලාගෙන සිටින කාමරයෙන් පිටව ගියේය. ඔබ පසුපස වෙනත් කිසිවෙකු පරික්ෂා නොකරන්නේ නම් සහ ඔබ නීතිවිරෝධී ලෙස නැවත ඔබේ කාමරයට ගියහොත්, ඔබගේ සියලු දේ මෙම විශේෂිත හෝටලයේ තවමත් පවතින බවට සහතික වේ .
තාවකාලික වෙළඳසැල් සඳහා අපි තොග භාවිතා කරන්නේ ඒවා ඇත්තෙන්ම ලාභදායී සහ පහසු බැවිනි. ප්රදේශවාසීන් ගබඩා කිරීම සඳහා තොගයක් භාවිතා කිරීම සඳහා C ++ ක්රියාත්මක කිරීම අවශ්ය නොවේ; එයට ගොඩවල් භාවිතා කළ හැකිය. එය එසේ නොවේ, මන්ද එය වැඩසටහන මන්දගාමී වනු ඇත.
C ++ ක්රියාවට නැංවීම සඳහා ඔබ ඉතිරි කර ඇති කුණු කසළ ඉවත් නොකිරීමට අවශ්ය වන අතර එමඟින් ඔබට පසුව නීති විරෝධී ලෙස ඒ සඳහා නැවත පැමිණිය හැකිය. ඔබ දැන් ඉවත්ව ගිය "කාමරයේ" ඇති සෑම දෙයක්ම ශුන්යයට හැරෙන කේතයක් සම්පාදනය කිරීම සම්පාදකයාට සම්පූර්ණයෙන්ම නීතිමය ය. එය නැවත මිල අධික වනු ඇති නිසා නොවේ.
තොගය තාර්කිකව හැකිලෙන විට, වලංගු වූ ලිපින තවමත් මතකයේ සිතියම් ගත කර ඇති බව සහතික කිරීම සඳහා C ++ ක්රියාත්මක කිරීම අවශ්ය නොවේ. ක්රියාත්මක කිරීමේ ක්රියාවලියට මෙහෙයුම් පද්ධතියට පැවසීමට අවසර දී ඇත "අපි දැන් මෙම තොගයේ පිටුව භාවිතා කර ඇත්තෙමු. මා වෙනත් ආකාරයකින් පවසන තුරු, කිසිවෙකු කලින් වලංගු වූ තොග පිටුවට අත තැබුවහොත් ක්රියාවලිය විනාශ කරන ව්යතිරේකයක් නිකුත් කරන්න". නැවතත්, ක්රියාවට නැංවීම ඇත්ත වශයෙන්ම එසේ නොකරන්නේ එය මන්දගාමී හා අනවශ්ය නිසාය.
ඒ වෙනුවට, ක්රියාත්මක කිරීම මඟින් ඔබට වැරදි කිරීමට සහ එයින් ගැලවීමට ඉඩ ලබා දේ. ගොඩක් වෙලාවට. එක් දිනක් සැබවින්ම භයානක දෙයක් වැරදී ගොස් ක්රියාවලිය පුපුරා යයි.
මෙය ගැටළු සහගතය. නීති රාශියක් ඇති අතර ඒවා අහම්බෙන් බිඳ දැමීම ඉතා පහසුය. මට නිසැකවම බොහෝ වාර ගණනක් තිබේ. වඩාත් නරක දෙය නම්, ගැටළුව බොහෝ විට මතු වන්නේ දූෂණය සිදුවීමෙන් පසු නැනෝ තත්පර බිලියන ගණනක් දූෂිත බව මතකය අනාවරණය වූ විට පමණි, එය අවුල් කළේ කවුරුන්ද යන්න සොයා ගැනීම ඉතා අසීරු වූ විට පමණි.
ඔබගේ බලය සීමා කිරීමෙන් වැඩි මතක ආරක්ෂිත භාෂා මෙම ගැටළුව විසඳයි. "සාමාන්ය" සී # හි හුදෙක් දේශීයයෙකුගේ ලිපිනය ගෙන එය ආපසු ලබා දීමට හෝ පසුව ගබඩා කිරීමට ක්රමයක් නොමැත. ඔබට දේශීයයෙකුගේ ලිපිනය ගත හැකිය, නමුත් භාෂාව දක්ෂ ලෙස නිර්මාණය කර ඇති අතර එමඟින් දේශීය අරමුණු වල ආයු කාලය අවසන් වූ පසු එය භාවිතා කළ නොහැක. දේශීය ලිපිනය ගෙන එය නැවත සමත් කිරීම සඳහා, ඔබ විශේෂ "අනාරක්ෂිත" ලෙස සම්පාදකවරයා දමා ඇති, හා ඔබේ වැඩසටහන "අනාරක්ෂිත" යන වචනය දමා, ඔබට මීට කරන්නේ බව අවධානය යොමු කිරීමට කිරීමට නීති කඩ කළ හැකි භයානක දෙයක්.
වැඩිදුර කියවීම සඳහා:
address of local variable ‘a’ returned
; valgrind showsInvalid write of size 4 [...] Address 0xbefd7114 is just below the stack ptr