10/07/2023
How variables store data in memory
(5mins)
Variable တွေဆိုတာ programmer တိုင်းနဲ့ ကင်းမှာ မဟုတ်ပါဘူး။ ဒါမဲ့ အများစုက variable ဆိုတာနဲ့ declaration, initialization, invocation လောက်နဲ့ပဲ သိကြတာ များပါတယ်။ ဒါကြောင့်မို့ ဒီတစ်ခေါက်မှာ variable တစ်လုံးဟာ နောက်ကွယ်မှာ ဘယ်လို အလုပ်လုပ်လဲဆိုတာကို ပြောပြသွားမှာပါ။
ကျွန်တော်တို့ value တစ်ခုကို store လုပ်ချင်တဲ့ အခါမျိုးမှာပဲ ဖြစ်ဖြစ်၊ အဲ့ value ကို ထပ်ခါ ထပ်ခါ သုံးဖို့ လိုအပ်လာတဲ့အခါပဲ ဖြစ်ဖြစ် variable ကို declaration/initialization တွေနဲ့ အသုံးပြုကြပါတယ်။ အဲ့လို အသုံးပြုတဲ့အခါမှာ ဒီ variable တွေထဲမှာ assign လုပ်ထားတဲ့ value က memory ထဲမှာ သွားသိမ်းရပါတယ်။ ပြီးတဲ့အခါ အဲ့ variable ကို ကျွန်တော်တို့ အသုံးပြုတဲ့အခါကျ value ကို memory ထဲကနပြီး သွားပြန်ဆွဲထုတ်ရပါတယ်။ ဒါက အကျဉ်းချုံးပါ။
အကျယ်က ကျွန်တော်တို့ variable တစ်လုံး initialize လိုက်ပြီဆိုရင်။ ဥပမာ -
char word_a = "A";
ဆိုကြပါစို့။ ဒီလိုလုပ်လိုက်ပြီဆိုရင် word ဆိုတဲ့ variable အတွက် memory address တစ်ခုကို ကျွန်တာ်တို့ရဲ့ RAM (Random Access Memory) ထဲမှာ သွားယူလိုက်ပါတယ်။ ဆိုလိုချင်တာက နေရာ တစ်ခု သွားယူလိုက်တာပါ။
ဥပမာ လူတစ်ယောက် နေထိုင်ဖို့အတွက် နေရာလွတ်တစ်ခုမှာ အိမ်ဆောက်လိုက်တဲ့ သဘောပါပဲ။ အိမ်တစ်လုံး ဆောက်လိုက်တဲ့အခါ အဲ့အိမ်မှာ လူနေလို့ ရတဲ့အပြင် အဲ့အိမ်ရဲ့ address တစ်ခုပါ ရလာတာမျိုးပါ။ ဆိုတော့ အဲ့လူကို ခေါ်ချင်ရင် အဲ့လူ နေတဲ့ နေရပ်လိပ်စာကို ထောက်လိုက်တာနဲ့ ခေါ်လို့ရသွားတာမျိုးပါ။
ဒီမှာလဲ ဒီသဘောပါပဲ။ data တစ်ခုကို ကျွန်တော်တို့ ပြန်သုံးချင်တယ်။ ပြန်သုံးဖို့အတွက် ကျွန်တော်တို့ store အရင်လုပ်ဖို့လိုတယ်။ အဲ့လို store လုပ်ဖို့အတွက် ကျွန်တော်တို့ memory (RAM) မှာ သွားသိမ်းရတယ်။ အဲ့လိုသွားသိမ်းတဲ့အခါမှာ အဲ့ဒီ့ data အတွက် memory address တစ်ခု ပြန်ရပါတယ်။ အဲ့ memory address ကို decimal value နဲ့ represented လုပ်ပါတယ်။ တကယ်တော့ သူလဲ binary တွေပါပဲ။ ကျွန်တော်တို့ variable invocation လုပ်တဲ့အခါမှာ memory address ကိုသုံးပြီး memory ထဲကနေ data ကို သွားပြန်ဆွဲထုတ်တာပါ။ ဘယ်ပေါ်ဆွဲထုတ်တာလဲဆိုတာ့ CPU ပေါ်ကို ပေါ့။ ဒီအကြောင်းကို နောက်မှ ကျွန်တော် သီးသန့် ရေးပါအုံးမယ်။
ဆိုတော့ ဒီအထိတော့ ရပြီ။ variable တစ်လုံး initialization လုပ်လိုက်တာနဲ့ အဲ့ variable ရဲ့ initial value ကို memory address နဲ့ RAM ထဲသွားသိမ်းတယ်။ သိမ်းတဲ့ နေရာမှာလဲ size limit ရှိတယ်။ အဲ့တာကျ သူ့ရှေ့က data type ကို ပြန်ကြည့်ရတယ်။ ကျွန်တော်တို့ 8GB RAM တစ်ချောင်း စိုက်ထားတယ် ဆိုပါစို့။ byte အနေနဲ့ဆို 8 x 10⁹ ရှိတယ်။ အဲ့တော့ ခုနက အပေါ်မှာ ကြေညာထားတဲ့ variable "word_a" ရဲ့ data type က char။ char ရဲ့ memory size limit က 1byte (8bits) ပဲရှိပါတယ်။ အဲ့တော့ ခုနက variable အတွက်ဆို 8GB RAM ထဲကနေ သူဟာ memory size 1byte ပဲသွားယူ ပါလိမ့်မယ်။ အဲ့မှာမှ နောက်ထပ် char data type နဲ့ variable တစ်လုံး initialize ထပ်လုပ်ရင် နောက်ထပ် 1byte ထပ်ယူမယ်။
အဲ့တော့ ယူပြီး ဘယ်လိုသိမ်းတာလဲဆိုတဲ့ မေးခွန်းရှိပါတယ်။ ခုနက char data type variable word_a ရဲ့ initial value က "A"။ အဲ့တော့ သူ့ကို ASCII-8 အရ binary ပြောင်းရင် 01000001 ရပါတယ်။ အဲ့တော့ memory address က 1000 ထားပါတော့။ အဲ့ကျ language မှာတော့
char word_a = "A"
ဆိုပြီး ဖြစ်နေပေမဲ့ memory ထဲမှာတာ့
1000 = 01000001
ဆိုတဲ့ ပုံစံမျိုးနဲ့ သွားသိမ်းပါတယ်။ အဲ့တော့ နောက်ထပ် char data type variable တစ်လုံး initialize လုပ်တဲ့အခါ သူ့ရဲ့ memory address က 1 တိုးသွားပါတယ်။ ဘာလို့ဆို ရှေ့က char ရဲ့ memory size က 1byte ရှိတာကြောင့်ပါ။
Language
char word_a = "A";
char word_b = "B";
Memory
1000