ကြော်ငြာပိတ်ပါ။

Mike Ash သူ့ဘလော့မှာ လှူတယ်။ iPhone 64S တွင် 5-bit ဗိသုကာသို့ပြောင်းခြင်း၏ လက်တွေ့ကျသောသက်ရောက်မှုများ။ ဤဆောင်းပါးသည် သူ၏တွေ့ရှိချက်များကို ကောက်နှုတ်ဖော်ပြပါသည်။

ဤစာသား၏အကြောင်းရင်းမှာ အဓိကအားဖြင့် 5-bit ARM ပရိုဆက်ဆာပါသည့် iPhone 64s အသစ်သည် သုံးစွဲသူများနှင့် စျေးကွက်အတွက် အမှန်တကယ်ဆိုလိုသည်နှင့် ပတ်သက်၍ သတင်းမှားများ အများအပြားပျံ့နှံ့နေခြင်းကြောင့်ဖြစ်သည်။ ဤနေရာတွင် ကျွန်ုပ်တို့သည် ဆော့ဖ်ဝဲရေးသားသူများအတွက် ဤအကူးအပြောင်း၏ စွမ်းဆောင်ရည်၊ စွမ်းဆောင်ရည်များနှင့် အကျိုးသက်ရောက်မှုများအကြောင်း ရည်မှန်းချက်အချက်အလက်ကို ယူဆောင်လာရန် ကြိုးစားပါမည်။

"64 bit"

"X-bit" အညွှန်းသည် ရည်ညွှန်းနိုင်သော ပရိုဆက်ဆာ၏ အပိုင်းနှစ်ပိုင်းရှိသည် - ကိန်းပြည့်စာရင်းသွင်းခြင်း၏ အကျယ်နှင့် အမှတ်အသားများ၏ အကျယ်။ ကံကောင်းထောက်မစွာ၊ ခေတ်မီပရိုဆက်ဆာအများစုတွင် ဤ width များသည်အတူတူပင်ဖြစ်သည်၊ ထို့ကြောင့် A7 တွင်၎င်းသည် 64-bit integer registers နှင့် 64-bit pointers ကိုဆိုလိုသည်။

သို့ရာတွင်၊ "64bit" ဆိုသည်မှာ မည်သည်ကို မဆိုလိုကြောင်း ထောက်ပြရန် ထပ်တူအရေးကြီးပါသည်။ RAM ရုပ်ပိုင်းဆိုင်ရာလိပ်စာအရွယ်အစား. RAM နှင့် ဆက်သွယ်ရန် ဘစ်အရေအတွက် (ထို့ကြောင့် စက်ပစ္စည်းတစ်ခု၏ RAM ပမာဏ) သည် CPU ဘစ်အရေအတွက်နှင့် မသက်ဆိုင်ပါ။ ARM ပရိုဆက်ဆာများသည် 26- နှင့် 40-bit လိပ်စာများအကြား မည်သည့်နေရာတွင်မဆို ရှိပြီး ကျန်စနစ်မှ သီးခြားပြောင်းလဲနိုင်သည်။

  • ဒေတာဘတ်စ်ကားအရွယ်အစား. RAM သို့မဟုတ် ကြားခံမှတ်ဉာဏ်မှရရှိသောဒေတာပမာဏသည် ဤအချက်နှင့်အလားတူဖြစ်သည်။ တစ်ဦးချင်း ပရိုဆက်ဆာ ညွှန်ကြားချက်များသည် မတူညီသော ဒေတာပမာဏကို တောင်းဆိုနိုင်သော်လည်း ၎င်းတို့ကို အတုံးလိုက်ဖြင့် ပေးပို့ခြင်း သို့မဟုတ် မှတ်ဉာဏ်မှ လိုအပ်သည်ထက်ပို၍ လက်ခံရရှိခြင်း ဖြစ်သည်။ ၎င်းသည် data ကွမ်တမ်၏အရွယ်အစားပေါ်တွင်မူတည်သည်။ iPhone 5 သည် 64-bit quanta (နှင့် 32-bit ပရိုဆက်ဆာ) တွင် memory မှဒေတာကိုလက်ခံရရှိထားပြီးဖြစ်ပြီး 192 bits အထိ အရွယ်အစားများကို ကြုံတွေ့နိုင်ပါသည်။
  • ရေပေါ်အချက်နှင့် ပတ်သက်သည့်အရာ. ထိုသို့သော မှတ်ပုံတင်ခြင်း (FPU) ၏ အရွယ်အစားသည် ပရိုဆက်ဆာ၏ အတွင်းပိုင်း လုပ်ဆောင်မှုများနှင့် တစ်ဖန် သီးခြားဖြစ်သည်။ ARM သည် ARM64 (64-bit ARM ပရိုဆက်ဆာ) မတိုင်မီကတည်းက 64-bit FPU ကို အသုံးပြုခဲ့သည်။

အထွေထွေ အားသာချက် အားနည်းချက်

တစ်နည်းအားဖြင့် ထပ်တူထပ်မျှတူညီသော 32bit နှင့် 64bit ဗိသုကာများကို နှိုင်းယှဉ်ပါက၊ ၎င်းတို့သည် ယေဘူယျအားဖြင့် ကွဲပြားမည်မဟုတ်ပါ။ Apple သည် မိုဘိုင်းလ်စက်ပစ္စည်းများတွင် 64bit သို့ပြောင်းရွှေ့ရသည့်အကြောင်းရင်းကိုလည်း ရှာဖွေနေသည့်အများပြည်သူတို့၏ ယေဘူယျရှုပ်ထွေးမှုများအတွက် အကြောင်းရင်းတစ်ခုဖြစ်သည်။ သို့ရာတွင်၊ ၎င်းအားလုံးသည် A7 (ARM64) ပရိုဆက်ဆာ၏ သီးခြားဘောင်များနှင့် Apple အသုံးပြုပုံ၊ ပရိုဆက်ဆာတွင် 64-bit ဗိသုကာရှိခြင်းမှ ဆင်းသက်လာခြင်းဖြစ်သည်။

သို့ရာတွင်၊ ဤဗိသုကာနှစ်ခုကြား ခြားနားချက်ကို ကျွန်ုပ်တို့ ဆက်လက်ကြည့်ရှုပါက၊ ကွဲပြားမှုများစွာကို ကျွန်ုပ်တို့ တွေ့ရှိမည်ဖြစ်သည်။ သိသာထင်ရှားသောအချက်မှာ 64-bit integer registers များသည် 64-bit integers များကို ပိုမိုထိရောက်စွာ ကိုင်တွယ်နိုင်ခြင်းကြောင့်ဖြစ်သည်။ ယခင်ကပင် 32-bit ပရိုဆက်ဆာများတွင် ၎င်းတို့နှင့် တွဲဖက်လုပ်ဆောင်နိုင်သော်လည်း များသောအားဖြင့် ၎င်းတို့ကို 32-bit ရှည်သောအပိုင်းများအဖြစ် ပိုင်းခြားထားသောကြောင့် တွက်ချက်မှုများ ပိုမိုနှေးကွေးစေပါသည်။ ထို့ကြောင့် 64-bit ပရိုဆက်ဆာသည် ယေဘုယျအားဖြင့် 64-bit အမျိုးအစားများနှင့် 32-bit များကဲ့သို့ လျင်မြန်စွာတွက်ချက်နိုင်သည်။ ဆိုလိုသည်မှာ ယေဘူယျအားဖြင့် 64-bit အမျိုးအစားများကို အသုံးပြုသည့် အပလီကေးရှင်းများသည် 64-bit ပရိုဆက်ဆာတွင် ပိုမိုမြန်ဆန်စွာ လုပ်ဆောင်နိုင်သည်ဟု ဆိုလိုသည်။

64bit သည် ပရိုဆက်ဆာအသုံးပြုနိုင်သည့် RAM စုစုပေါင်းပမာဏကို မထိခိုက်စေသော်လည်း ၎င်းသည် ပရိုဂရမ်တစ်ခုတွင် RAM အမြောက်အမြားဖြင့် လုပ်ဆောင်ရန် ပိုမိုလွယ်ကူစေသည်။ 32-bit ပရိုဆက်ဆာပေါ်တွင် လုပ်ဆောင်နေသည့် မည်သည့်ပရိုဂရမ်မဆို လိပ်စာနေရာ 4 GB ခန့်သာရှိသည်။ လည်ပတ်မှုစနစ်နှင့် စံစာကြည့်တိုက်များသည် တစ်ခုခုယူဆောင်သွားသည်ကို ထည့်သွင်းစဉ်းစားခြင်းဖြင့်၊ ၎င်းသည် ပရိုဂရမ်ကို အက်ပ်အသုံးပြုရန်အတွက် 1-3 GB ကြား တစ်နေရာမှ ထားရှိမည်ဖြစ်သည်။ သို့သော် 32-bit စနစ်တွင် RAM 4GB ထက်ပိုပါက၊ ထို memory ကိုအသုံးပြုခြင်းသည် အနည်းငယ်ပိုမိုရှုပ်ထွေးပါသည်။ ကျွန်ုပ်တို့၏ပရိုဂရမ်အတွက် ဤပိုကြီးသောမှတ်ဉာဏ်အပိုင်းများကို မြေပုံဆွဲရန် လည်ပတ်မှုစနစ်အား တွန်းအားပေးရန် လိုအပ်သည် သို့မဟုတ် ကျွန်ုပ်တို့သည် ပရိုဂရမ်ကို လုပ်ငန်းစဉ်များစွာအဖြစ် ခွဲထုတ်နိုင်သည် (လုပ်ငန်းစဉ်တစ်ခုစီတွင် သီအိုရီအရ တိုက်ရိုက်ဖြေရှင်းရန် 4 GB မမ်မိုရီပါရှိသည့်) ပရိုဂရမ်ကို လုပ်ငန်းစဉ်တစ်ခုစီတွင် အသုံးပြုနိုင်မည်ဖြစ်သည်။

သို့သော်လည်း ဤ "hacks" များသည် အလွန်ခက်ခဲပြီး နှေးကွေးသောကြောင့် အပလီကေးရှင်းများ အနည်းဆုံး အသုံးပြုကြသည်။ လက်တွေ့တွင်၊ 32-bit ပရိုဆက်ဆာတွင် ပရိုဂရမ်တစ်ခုစီသည် ၎င်း၏ 1-3 GB မမ်မိုရီကိုသာ အသုံးပြုမည်ဖြစ်ပြီး ပိုမိုရရှိနိုင်သော RAM ကို ပရိုဂရမ်များစွာကို တစ်ချိန်တည်းတွင် လုပ်ဆောင်ရန် သို့မဟုတ် ဤမှတ်ဉာဏ်ကို ကြားခံ (caching) အဖြစ် အသုံးပြုနိုင်သည်။ ဤအသုံးပြုမှုများသည် လက်တွေ့ကျသော်လည်း ကျွန်ုပ်တို့သည် မည်သည့်ပရိုဂရမ်မဆို 4GB ထက်ကြီးသော မမ်မိုရီအပိုင်းများကို လွယ်ကူစွာအသုံးပြုနိုင်စေလိုပါသည်။

ယခု ကျွန်ုပ်တို့သည် မမ်မိုရီ 4GB ထက်မပိုဘဲ၊ 64-bit တည်ဆောက်ပုံသည် အသုံးမဝင်ကြောင်း မကြာခဏ (အမှန်တကယ် မှားယွင်းနေသည်) ထံ ကျွန်ုပ်တို့ရောက်ရှိလာပါသည်။ မမ်မိုရီနည်းသော စနစ်တွင်ပင် လိပ်စာနေရာပိုကြီးသည် အသုံးဝင်သည်။ Memory-mapped ဖိုင်များသည် ဖိုင်တစ်ခုလုံးကို memory ထဲသို့ တင်စရာမလိုဘဲ လုပ်ငန်းစဉ်၏ memory သို့ ယုတ္တိရှိရှိ ချိတ်ဆက်ထားသည့် အသုံးဝင်သော tool တစ်ခုဖြစ်သည်။ ထို့ကြောင့်၊ ဥပမာအားဖြင့်၊ စနစ်သည် RAM ပမာဏထက် အဆများစွာ ပိုကြီးသော ဖိုင်ကြီးများကို တဖြည်းဖြည်း လုပ်ဆောင်နိုင်သည်။ 32-bit စနစ်တွင်၊ ထိုကဲ့သို့သော ကြီးမားသောဖိုင်များကို ယုံကြည်စိတ်ချစွာ မန်မိုရီမြေပုံပြုလုပ်၍မရသော်လည်း 64-bit စနစ်တွင်၊ ၎င်းသည် ပိုမိုကြီးမားသောလိပ်စာနေရာကြောင့် ကိတ်မုန့်တစ်ခုဖြစ်သည်။

သို့သော်လည်း၊ ညွှန်ပြသည့် အရွယ်အစား ကြီးမားခြင်းသည် ကြီးမားသော အားနည်းချက်ကိုလည်း ဆောင်ကျဉ်းပေးသည်- မဟုတ်ပါက အလားတူ ပရိုဂရမ်များသည် 64-bit ပရိုဆက်ဆာတွင် မန်မိုရီပိုလိုအပ်သည် (ဤပိုကြီးသော ညွှန်ပြချက်များကို တစ်နေရာရာတွင် သိမ်းဆည်းထားရန် လိုအပ်သည်)။ ညွှန်မှတ်များသည် ပရိုဂရမ်များ၏ မကြာခဏ အစိတ်အပိုင်းတစ်ခုဖြစ်သောကြောင့်၊ ဤခြားနားချက်သည် စနစ်တစ်ခုလုံးကို နှေးကွေးသွားစေသည့် ကက်ရှ်ကို ဝန်ထုပ်ဝန်ပိုးဖြစ်စေနိုင်သည်။ ထို့ကြောင့် ကျွန်ုပ်တို့သည် ပရိုဆက်ဆာဗိသုကာဗိသုကာကို 64-bit သို့ပြောင်းလိုက်လျှင်၊ ၎င်းသည် စနစ်တစ်ခုလုံးကို အမှန်တကယ် နှေးကွေးစေမည်ကို ရှုထောင့်အရ ကြည့်နိုင်သည်။ ထို့ကြောင့် ဤအချက်ကို အခြားနေရာများတွင် ပိုကောင်းအောင်ပြုလုပ်ခြင်းဖြင့် ဟန်ချက်ညီရန် လိုအပ်ပါသည်။

ARM64

iPhone 7s အသစ်ကို ပါဝါပေးသည့် 64-bit ပရိုဆက်ဆာ A5 သည် ပိုမိုကျယ်ပြန့်သော မှတ်ပုံတင်ထားသော ပုံမှန် ARM ပရိုဆက်ဆာတစ်ခုမျှသာ မဟုတ်ပါ။ ARM64 သည် 32-bit ဗားရှင်းအဟောင်းများထက် ကြီးမားသောတိုးတက်မှုများပါရှိသည်။

Apple A7 ပရိုဆက်ဆာ။

registry ကို

ARM64 သည် 32-bit ARM ကဲ့သို့ ကိန်းပြည့် မှတ်ပုံတင်မှု နှစ်ဆ ပိုများသည် (မှတ်ပုံတင် အရေအတွက်နှင့် အကျယ်ကို မရောထွေးမိစေရန် သတိပြုပါ - "64-bit" ကဏ္ဍတွင် အကျယ်အကြောင်း ပြောထားပါသည်။ ထို့ကြောင့် ARM64 တွင် ကျယ်ဝန်းသော မှတ်ပုံတင်မှုများ နှစ်ဆရှိပြီး နှစ်ဆပိုများသည်။ မှတ်ပုံတင်များ)။ 32-bit ARM တွင် ကိန်းပြည့်မှတ်ပုံတင် 16 ခုပါရှိသည်- ပရိုဂရမ်ကောင်တာတစ်ခု (PC - လက်ရှိညွှန်ကြားချက်အရေအတွက်ပါရှိသည်)၊ stack pointer (လုပ်ဆောင်နေသောလုပ်ဆောင်မှုတစ်ခုဆီသို့ညွှန်ပြသည့်ညွှန်ပြမှု)၊ လင့်ခ်မှတ်ပုံတင်ခြင်း (ပြီးဆုံးပြီးနောက်ပြန်ရန်ညွှန်ပြချက်တစ်ခု function ၏) နှင့်ကျန် 13 သည် application ကိုအသုံးပြုရန်ဖြစ်သည်။ သို့ရာတွင်၊ ARM64 တွင် သုညမှတ်ပုံတင်တစ်ခု၊ လင့်ခ်မှတ်ပုံတင်တစ်ခု၊ ဖရိန်ညွှန်ပြမှု ( stack pointer ကဲ့သို့) နှင့် အနာဂတ်အတွက် သီးသန့်တစ်ခုအပါအဝင် ကိန်းပြည့်မှတ်ပုံတင် 32 ခုရှိသည်။ ၎င်းသည် 28-bit ARM ထက် နှစ်ဆပိုများသော လျှောက်လွှာအသုံးပြုမှုအတွက် မှတ်ပုံတင်မှု 32 ခု ရှိသည်။ တစ်ချိန်တည်းမှာပင်၊ ARM64 သည် floating-point နံပါတ် (FPU) မှတ်ပုံတင်သည့်အရေအတွက်ကို 16 မှ 32 128-bit မှတ်ပုံတင်မှုများမှ နှစ်ဆတိုးခဲ့သည်။

ဒါပေမယ့် မှတ်ပုံတင်အရေအတွက်က ဘာကြောင့် အရမ်းအရေးကြီးတာလဲ။ မန်မိုရီသည် ယေဘူယျအားဖြင့် CPU တွက်ချက်မှုများထက် နှေးကွေးပြီး စာဖတ်ခြင်း/ရေးခြင်းမှာ အလွန်ကြာပါသည်။ ၎င်းသည် မြန်ဆန်သော ပရိုဆက်ဆာသည် မှတ်ဉာဏ်ကို စောင့်ရမည်ဖြစ်ပြီး ကျွန်ုပ်တို့သည် စနစ်၏ သဘာဝအမြန်နှုန်းကန့်သတ်ချက်ကို ကျော်လွန်သွားမည်ဖြစ်သည်။ ပရိုဆက်ဆာများသည် ဤအခက်အခဲကို ကြားခံအလွှာများဖြင့် ဖုံးကွယ်ရန် ကြိုးစားသော်လည်း အမြန်ဆုံး (L1) သည် ပရိုဆက်ဆာ၏ တွက်ချက်မှုထက် နှေးနေသေးသည်။ သို့သော်၊ မှတ်ပုံတင်များသည် ပရိုဆက်ဆာရှိ မန်မိုရီဆဲလ်များ တိုက်ရိုက်ဖြစ်ပြီး ၎င်းတို့၏ စာဖတ်ခြင်း/စာရေးခြင်းများသည် ပရိုဆက်ဆာကို နှေးကွေးစေရန် မလုံလောက်ပါ။ မှတ်ပုံတင်အရေအတွက်သည် လက်တွေ့ကျကျအားဖြင့် ပရိုဆက်ဆာတွက်ချက်မှုများအတွက် အမြန်ဆုံးမှတ်ဉာဏ်ပမာဏကို ဆိုလိုပြီး စနစ်တစ်ခုလုံး၏အမြန်နှုန်းကို များစွာထိခိုက်စေသည်။

တစ်ချိန်တည်းမှာပင်၊ ဤအမြန်နှုန်းသည် compiler ထံမှ ကောင်းမွန်သော optimization ပံ့ပိုးမှု လိုအပ်သည်၊ သို့မှသာ ဘာသာစကားသည် ဤစာရင်းသွင်းမှုများကို အသုံးပြုနိုင်ပြီး ယေဘုယျအပလီကေးရှင်း (နှေးသော) မှတ်ဉာဏ်တွင် အရာအားလုံးကို သိမ်းဆည်းထားရန် မလိုအပ်ပါ။

ညွှန်ကြားချက်အစုံ

ARM64 သည် ညွှန်ကြားချက်အစုံသို့ ကြီးမားသောပြောင်းလဲမှုများကိုလည်း ယူဆောင်လာသည်။ ညွှန်ကြားချက်အစုံသည် ပရိုဆက်ဆာတစ်ခုလုပ်ဆောင်နိုင်သည့် အနုမြူလုပ်ဆောင်မှုအစုတစ်ခုဖြစ်သည် (ဥပမာ 'ADD register1 register2' သည် မှတ်ပုံတင်နှစ်ခုတွင် နံပါတ်များကို ထည့်သည်)။ ဘာသာစကားတစ်ခုချင်းစီအတွက် ရရှိနိုင်သောလုပ်ဆောင်ချက်များသည် ဤညွှန်ကြားချက်များဖြင့် ဖွဲ့စည်းထားသည်။ ပိုမိုရှုပ်ထွေးသောလုပ်ဆောင်ချက်များသည် ညွှန်ကြားချက်များကို ပိုမိုလုပ်ဆောင်ရမည်ဖြစ်သောကြောင့် ၎င်းတို့သည် ပိုမိုနှေးကွေးနိုင်ပါသည်။

ARM64 တွင်အသစ်များသည် AES ကုဒ်ဝှက်ခြင်း၊ SHA-1 နှင့် SHA-256 hash လုပ်ဆောင်ချက်များအတွက် ညွှန်ကြားချက်များဖြစ်သည်။ ထို့ကြောင့် ရှုပ်ထွေးသော အကောင်အထည်ဖော်မှုအစား၊ ဘာသာစကားကသာ ဤညွှန်ကြားချက်ကို ခေါ်ဆိုလိမ့်မည် - ထိုကဲ့သို့သော လုပ်ဆောင်ချက်များကို တွက်ချက်ရာတွင် အရှိန်အဟုန်မြင့်လာစေပြီး အပလီကေးရှင်းများတွင် လုံခြုံရေးကို ထပ်လောင်းပေးမည်ဟု မျှော်လင့်ပါသည်။ E.g. Touch ID အသစ်သည် အစစ်အမှန်အမြန်နှုန်းနှင့် လုံခြုံရေးအတွက် ခွင့်ပြုပေးသော ဤညွှန်ကြားချက်များကို လျှို့ဝှက်ကုဒ်သွင်းရာတွင်လည်း အသုံးပြုသည် (သီအိုရီအရ၊ တိုက်ခိုက်သူတစ်ဦးသည် ဒေတာဝင်ရောက်ရန် ပရိုဆက်ဆာကိုယ်တိုင် မွမ်းမံပြင်ဆင်ရမည်ဖြစ်ပြီး၊ ၎င်းသည် ၎င်း၏အသေးစားအရွယ်အစားဟု ပြောရလျှင် လက်တွေ့မကျသော)။

32bit နှင့်လိုက်ဖက်သည်။

A7 သည် emulation မလိုအပ်ဘဲ 32-bit mode တွင် အပြည့်အဝလည်ပတ်နိုင်သည်ကို ဖော်ပြရန် အရေးကြီးပါသည်။ ဆိုလိုသည်မှာ iPhone 5s အသစ်သည် နှေးကွေးမှုမရှိဘဲ 32-bit ARM တွင်စုစည်းထားသော application များကို run နိုင်သည်။ သို့သော်၊ ထို့နောက် ၎င်းသည် ARM64 လုပ်ဆောင်ချက်အသစ်များကို အသုံးမပြုနိုင်ပါ၊ ထို့ကြောင့် ပိုမိုမြန်ဆန်သင့်သော A7 အတွက် အထူးတည်ဆောက်မှုတစ်ခု ပြုလုပ်ရန် အမြဲတမ်း ထိုက်တန်ပါသည်။

Runtime အပြောင်းအလဲများ

Runtime သည် ပရိုဂရမ်းမင်းဘာသာစကားသို့ လုပ်ဆောင်ချက်များကို ပေါင်းထည့်သည့် ကုဒ်ဖြစ်ပြီး ၎င်းသည် အပလီကေးရှင်းကို လုပ်ဆောင်နေချိန်၊ ဘာသာပြန်ပြီးသည့်တိုင်အောင် အသုံးပြုနိုင်သည်။ Apple သည် အပလီကေးရှင်းနှင့် လိုက်ဖက်ညီမှုကို ဆက်လက်ထိန်းသိမ်းထားရန် မလိုအပ်သောကြောင့် (64-bit binary သည် 32-bit တွင်အလုပ်လုပ်သည်)၊ ၎င်းတို့သည် Objective-C ဘာသာစကားအတွက် နောက်ထပ်တိုးတက်မှုအနည်းငယ်ကို ပြုလုပ်နိုင်မည်ဖြစ်သည်။

အဲဒီထဲက တစ်မျိုးက ခေါ်တာ။ tag ညွှန်ပြ (အမှတ်အသားပြုထားသော ညွှန်ပြချက်)။ ပုံမှန်အားဖြင့်၊ ထိုအရာဝတ္တုများဆီသို့ အရာဝတ္ထုများနှင့် ညွှန်ပြချက်များကို မှတ်ဉာဏ်၏ သီးခြားအစိတ်အပိုင်းများတွင် သိမ်းဆည်းထားသည်။ သို့သော်၊ ညွှန်ပြသည့်အမျိုးအစားအသစ်များသည် အချက်အလက်အနည်းငယ်ပါသော အတန်းများကို pointer တွင် အရာဝတ္ထုများကို တိုက်ရိုက်သိမ်းဆည်းရန် ခွင့်ပြုသည်။ ဤအဆင့်သည် အရာဝတ္တုအတွက် မှတ်ဉာဏ်ကို တိုက်ရိုက်ခွဲဝေရန် လိုအပ်မှုကို ဖယ်ရှားပေးကာ ညွှန်ပြချက်တစ်ခုနှင့် ၎င်းအတွင်းရှိ အရာဝတ္ထုကို ဖန်တီးလိုက်ရုံပင်။ အသုံးဝင်သောဒေတာ လုံလောက်စွာသိမ်းဆည်းရန် 64-bit pointer တွင် နေရာအလုံအလောက်မရှိတော့သောကြောင့် Tagged pointers များကို 32-bit ဗိသုကာတွင်သာ ပံ့ပိုးထားပါသည်။ ထို့ကြောင့် OS X နှင့်မတူဘဲ iOS သည် ဤအင်္ဂါရပ်ကို ပံ့ပိုးမပေးသေးပါ။ သို့သော် ARM64 ရောက်ရှိလာသည်နှင့်အမျှ ၎င်းသည် ပြောင်းလဲနေပြီး iOS သည်လည်း ယင်းကိစ္စနှင့် ပတ်သက်၍ OS X ကို ဖမ်းဆုပ်ထားသည်။

pointer များသည် 64 bits ရှည်သော်လည်း ARM64 တွင် pointer ၏ကိုယ်ပိုင်လိပ်စာအတွက် 33 bits ကိုသာအသုံးပြုပါသည်။ အကယ်၍ ကျွန်ုပ်တို့သည် ကျန်သောညွှန်ပြဘစ်များကို စိတ်ချယုံကြည်စွာ ဖုံးအုပ်ထားနိုင်လျှင်၊ ဖော်ပြထားသော တဂ်လုပ်ထားသော ညွှန်ပြချက်များကဲ့သို့ အပိုဒေတာများကို သိမ်းဆည်းရန် ဤနေရာကို အသုံးပြုနိုင်ပါသည်။ သဘောတရားအရ၊ ၎င်းသည် Objective-C ၏ သမိုင်းတွင် အကြီးမားဆုံး အပြောင်းအလဲများထဲမှ တစ်ခုဖြစ်ပြီး ၎င်းသည် စျေးကွက်တင်နိုင်သော အင်္ဂါရပ်မဟုတ်သော်လည်း၊ ထို့ကြောင့် အသုံးပြုသူအများစုသည် Apple ၏ Objective-C ကို မည်သို့ရှေ့ဆက်နေမည်ကို မသိနိုင်ပါ။

ဤကဲ့သို့ tagged pointer ၏ကျန်ရှိသောနေရာများတွင် သိမ်းဆည်းနိုင်သည့် အသုံးဝင်သောဒေတာများအတွက် ဥပမာ Objective-C ဟုခေါ်သော သိမ်းဆည်းရန် ၎င်းကိုအသုံးပြုနေပြီဖြစ်သည်။ အကိုးအကားအရေအတွက် (ကိုးကားမှုအရေအတွက်)။ ယခင်က၊ ၎င်းအတွက် ပြင်ဆင်ထားသော hash table တွင် ရည်ညွှန်းကိန်းကို မမ်မိုရီတွင် မတူညီသောနေရာ၌ သိမ်းဆည်းထားခဲ့သော်လည်း alloc/dealloc/retain/release ခေါ်ဆိုမှုများ အများအပြားရှိသောအခါတွင် ၎င်းသည် စနစ်တစ်ခုလုံးကို နှေးကွေးသွားစေနိုင်သည်။ thread ဘေးကင်းမှုကြောင့် ဇယားကို လော့ခ်ချရမည်ဖြစ်ပြီး၊ ထို့ကြောင့် thread နှစ်ခုရှိ အရာဝတ္ထုနှစ်ခု၏ ရည်ညွှန်းကိန်းကို တစ်ချိန်တည်းတွင် ပြောင်းလဲ၍မရပါ။ သို့သော် ဤတန်ဖိုးကို အခြားအရာများထဲသို့ အသစ်ထည့်သွင်းထားသည်။ Isa အညွှန်းများ ၎င်းသည် နောက်ထပ် ထင်ထင်ရှားရှားမရှိသော်လည်း အနာဂတ်တွင် ကြီးမားသော အားသာချက်နှင့် အရှိန်အဟုန်။ သို့သော်၊ ၎င်းကို 32-bit ဗိသုကာတွင် မည်သည့်အခါမျှ အောင်မြင်နိုင်မည်မဟုတ်ပေ။

အရာဝတ္တုအား အားနည်းစွာ ကိုးကားခြင်းရှိမရှိ၊ အရာဝတ္တုအတွက် destructor ထုတ်ပေးရန် လိုအပ်သည်ဖြစ်စေ စသည်ဖြင့် ဆက်စပ်အရာဝတ္တုများဆိုင်ရာ အချက်အလက်များကို အရာဝတ္ထုများသို့ ညွှန်ပြသည့်နေရာ၏ ကျန်ရှိသောနေရာသို့ အသစ်ထည့်သွင်းထားပါသည်။ ဤအချက်အလက်များကြောင့် Objective-C runtime သည် အပလီကေးရှင်းတစ်ခုစီ၏ အမြန်နှုန်းတွင် ထင်ဟပ်နေသည့် runtime ကို အခြေခံအားဖြင့် အရှိန်မြှင့်နိုင်သည်။ စမ်းသပ်ခြင်းမှ၊ ၎င်းသည် မမ်မိုရီစီမံခန့်ခွဲမှုခေါ်ဆိုမှုအားလုံး၏ 40-50% ခန့် အရှိန်မြှင့်ခြင်းကို ဆိုလိုသည်။ 64-bit pointers သို့ပြောင်းပြီး ဤနေရာအသစ်ကို အသုံးပြုခြင်းဖြင့်သာ။

နိဂုံး

ပြိုင်ဘက်များသည် 64-bit ဗိသုကာသို့ ပြောင်းရွှေ့ရန် မလိုအပ်ကြောင်း အယူအဆကို ဖြန့်ကျက်ရန် ကြိုးစားသော်လည်း၊ ၎င်းသည် အလွန် အသိမဝင်သော ထင်မြင်ချက်တစ်ခုသာဖြစ်ကြောင်း သင်သိပြီးသားဖြစ်ပါလိမ့်မည်။ သင့်ဘာသာစကား သို့မဟုတ် အပလီကေးရှင်းများကို လိုက်လျောညီထွေမဖြစ်အောင် 64-bit သို့ပြောင်းခြင်းသည် အမှန်တကယ်အဓိပ္ပာယ်မရှိပါ - ၎င်းသည် စနစ်တစ်ခုလုံးကိုပင် နှေးကွေးစေသည်။ သို့သော် A7 အသစ်သည် ခေတ်မီ ARM64 ကို ညွှန်ကြားချက်အသစ်ဖြင့် အသုံးပြုထားပြီး Apple သည် Objective-C language တစ်ခုလုံးကို ခေတ်မီအောင်လုပ်ဆောင်ကာ စွမ်းဆောင်ရည်အသစ်များကို အခွင့်ကောင်းယူကာ အရှိန်မြှင့်မည်ဟု ကတိပြုထားသည်။

ဤတွင် ကျွန်ုပ်တို့သည် 64-bit Architecture သည် ရှေ့သို့ မှန်ကန်သော ခြေလှမ်းဖြစ်ရသည့် အကြောင်းရင်းများစွာကို ဖော်ပြထားပါသည်။ Apple သည် ဒီဇိုင်း၊ အသုံးပြုသူမျက်နှာပြင်နှင့် ကြွယ်ဝသော ဂေဟစနစ်တို့သာမက အဓိကအားဖြင့် စျေးကွက်တွင် ခေတ်အမီဆုံးနည်းပညာများဖြင့် ရှေ့တန်းမှနေရန် ကြိုးစားသွားသည့်အတွက်ကြောင့် ၎င်းသည် နောက်ထပ်တော်လှန်ရေးတစ်ခုဖြစ်သည်။

ရင်းမြစ် - mikeash.com
.