ປິດໂຄສະນາ

Mike Ash ອຸທິດຕົນໃນ blog ລາວ ຜົນກະທົບທາງປະຕິບັດຂອງການປ່ຽນໄປສູ່ສະຖາປັດຕະຍະກໍາ 64-bit ໃນ iPhone 5S. ບົດ​ຄວາມ​ນີ້​ດຶງ​ດູດ​ການ​ຄົ້ນ​ພົບ​ຂອງ​ຕົນ.

ເຫດຜົນສໍາລັບຂໍ້ຄວາມນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນມາຈາກການເຜີຍແຜ່ຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງກ່ຽວກັບສິ່ງທີ່ iPhone 5s ໃຫມ່ທີ່ມີໂປເຊດເຊີ ARM 64-bit ຕົວຈິງຫມາຍຄວາມວ່າສໍາລັບຜູ້ໃຊ້ແລະຕະຫຼາດ. ໃນທີ່ນີ້ພວກເຮົາຈະພະຍາຍາມນໍາເອົາຂໍ້ມູນຈຸດປະສົງກ່ຽວກັບການປະຕິບັດ, ຄວາມສາມາດແລະຜົນສະທ້ອນຂອງການປ່ຽນແປງນີ້ສໍາລັບນັກພັດທະນາ.

"64 ບິດ"

ມີສອງສ່ວນຂອງໂປເຊດເຊີທີ່ປ້າຍ "X-bit" ສາມາດອ້າງອີງ - ຄວາມກວ້າງຂອງຕົວເລກຈໍານວນເຕັມທີ່ລົງທະບຽນແລະຄວາມກວ້າງຂອງຕົວຊີ້. ໂຊກດີ, ໃນໂປເຊດເຊີທີ່ທັນສະໄຫມສ່ວນໃຫຍ່ຄວາມກວ້າງເຫຼົ່ານີ້ແມ່ນຄືກັນ, ດັ່ງນັ້ນໃນກໍລະນີຂອງ A7 ນີ້ຫມາຍຄວາມວ່າການລົງທະບຽນຈໍານວນ 64-bit ແລະຕົວຊີ້ 64-bit.

ຢ່າງໃດກໍ່ຕາມ, ມັນເປັນສິ່ງສໍາຄັນເທົ່າທຽມກັນທີ່ຈະຊີ້ໃຫ້ເຫັນວ່າ "64bit" ບໍ່ໄດ້ຫມາຍຄວາມວ່າ: ຂະໜາດທີ່ຢູ່ທາງກາຍະພາບຂອງ RAM. ຈໍາ​ນວນ​ຂອງ bits ໃນ​ການ​ສື່​ສານ​ກັບ RAM (ສະ​ນັ້ນ​ຈໍາ​ນວນ​ຂອງ RAM ອຸ​ປະ​ກອນ​ສາ​ມາດ​ສະ​ຫນັບ​ສະ​ຫນູນ​) ບໍ່​ກ່ຽວ​ຂ້ອງ​ກັບ​ຈໍາ​ນວນ​ຂອງ CPU bits​. ໂປເຊດເຊີ ARM ມີທີ່ຢູ່ລະຫວ່າງ 26- ແລະ 40-bit ແລະສາມາດປ່ຽນແປງເປັນເອກະລາດຈາກສ່ວນທີ່ເຫຼືອຂອງລະບົບ.

  • ຂະໜາດລົດເມຂໍ້ມູນ. ຈໍານວນຂໍ້ມູນທີ່ໄດ້ຮັບຈາກ RAM ຫຼື buffer memory ແມ່ນຄ້າຍຄືກັນກັບປັດໃຈນີ້. ຄໍາແນະນໍາຂອງໂປເຊດເຊີສ່ວນບຸກຄົນອາດຈະຮ້ອງຂໍໃຫ້ມີຈໍານວນຂໍ້ມູນທີ່ແຕກຕ່າງກັນ, ແຕ່ພວກມັນຖືກສົ່ງເປັນຕ່ອນໆຫຼືໄດ້ຮັບຫຼາຍກວ່າຄວາມຕ້ອງການຈາກຫນ່ວຍຄວາມຈໍາ. ມັນຂຶ້ນກັບຂະຫນາດຂອງຂໍ້ມູນ quantum. iPhone 5 ໄດ້ຮັບຂໍ້ມູນຈາກຫນ່ວຍຄວາມຈໍາແລ້ວໃນ 64-bit quanta (ແລະມີໂປເຊດເຊີ 32-bit), ແລະພວກເຮົາສາມາດພົບກັບຂະຫນາດເຖິງ 192 bits.
  • ທຸກຢ່າງທີ່ກ່ຽວຂ້ອງກັບຈຸດລອຍ. ຂະຫນາດຂອງການລົງທະບຽນດັ່ງກ່າວ (FPU) ອີກເທື່ອຫນຶ່ງແມ່ນເປັນເອກະລາດຂອງການເຮັດວຽກພາຍໃນຂອງໂປເຊດເຊີ. ARM ໄດ້ໃຊ້ FPU 64-bit ຕັ້ງແຕ່ກ່ອນ ARM64 (ໂປເຊດເຊີ ARM 64-bit).

ຂໍ້ດີແລະຂໍ້ເສຍທົ່ວໄປ

ຖ້າພວກເຮົາປຽບທຽບສະຖາປັດຕະຍະກໍາ 32bit ແລະ 64bit ທີ່ຄ້າຍຄືກັນ, ໂດຍທົ່ວໄປແລ້ວພວກມັນບໍ່ແຕກຕ່າງກັນ. ນີ້ແມ່ນເຫດຜົນຫນຶ່ງສໍາລັບຄວາມສັບສົນທົ່ວໄປຂອງສາທາລະນະທີ່ຊອກຫາເຫດຜົນທີ່ວ່າ Apple ກໍາລັງຍ້າຍໄປ 64bit ໃນອຸປະກອນມືຖືເຊັ່ນດຽວກັນ. ຢ່າງໃດກໍ່ຕາມ, ມັນທັງຫມົດແມ່ນມາຈາກຕົວກໍານົດການສະເພາະຂອງໂປເຊດເຊີ A7 (ARM64) ແລະວິທີທີ່ Apple ໃຊ້ມັນ, ບໍ່ພຽງແຕ່ມາຈາກຄວາມຈິງທີ່ວ່າໂປເຊດເຊີມີສະຖາປັດຕະຍະກໍາ 64 ບິດ.

ຢ່າງໃດກໍຕາມ, ຖ້າພວກເຮົາຍັງເບິ່ງຄວາມແຕກຕ່າງລະຫວ່າງສອງສະຖາປັດຕະຍະກໍານີ້, ພວກເຮົາຈະພົບເຫັນຄວາມແຕກຕ່າງຫຼາຍ. ສິ່ງທີ່ເຫັນໄດ້ຊັດເຈນແມ່ນວ່າການລົງທະບຽນຈໍານວນ 64-bit ສາມາດຈັດການກັບຈໍານວນ 64-bit ໄດ້ມີປະສິດທິພາບຫຼາຍຂຶ້ນ. ເຖິງແມ່ນວ່າກ່ອນຫນ້ານີ້, ມັນເປັນໄປໄດ້ທີ່ຈະເຮັດວຽກກັບພວກມັນໃນໂປເຊດເຊີ 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 ມີຫຼາຍກວ່າ 4 GB ຂອງ RAM, ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍານັ້ນແມ່ນສັບສົນຫຼາຍ. ພວກເຮົາຕ້ອງຫັນໄປຫາການບັງຄັບໃຫ້ລະບົບປະຕິບັດການແຜນທີ່ຫນ່ວຍຄວາມຈໍາຂະຫນາດໃຫຍ່ເຫຼົ່ານີ້ສໍາລັບໂຄງການຂອງພວກເຮົາ (memory virtualization), ຫຼືພວກເຮົາສາມາດແຍກໂຄງການອອກເປັນຫຼາຍຂະບວນການ (ເຊິ່ງແຕ່ລະຂະບວນການອີກເທື່ອຫນຶ່ງທາງທິດສະດີມີ 4 GB ຂອງຫນ່ວຍຄວາມຈໍາທີ່ມີຢູ່ສໍາລັບການທີ່ຢູ່ໂດຍກົງ).

ຢ່າງໃດກໍຕາມ, "hack" ເຫຼົ່ານີ້ແມ່ນມີຄວາມຫຍຸ້ງຍາກແລະຊ້າຫຼາຍທີ່ຄໍາຮ້ອງສະຫມັກຕໍາ່ສຸດທີ່ນໍາໃຊ້ໃຫ້ເຂົາເຈົ້າ. ໃນທາງປະຕິບັດ, ໃນໂປເຊດເຊີ 32-bit, ແຕ່ລະໂປລແກລມຈະໃຊ້ຫນ່ວຍຄວາມຈໍາ 1-3 GB ຂອງມັນເທົ່ານັ້ນ, ແລະ RAM ທີ່ມີຢູ່ຫຼາຍສາມາດຖືກນໍາໃຊ້ເພື່ອດໍາເນີນການຫຼາຍໂຄງການໃນເວລາດຽວກັນຫຼືໃຊ້ຫນ່ວຍຄວາມຈໍານີ້ເປັນ buffer (caching). ການ​ນໍາ​ໃຊ້​ເຫຼົ່າ​ນີ້​ແມ່ນ​ໄດ້​ປະ​ຕິ​ບັດ​, ແຕ່​ພວກ​ເຮົາ​ຕ້ອງ​ການ​ໃຫ້​ໂຄງ​ການ​ທີ່​ຈະ​ສາ​ມາດ​ນໍາ​ໃຊ້​ໄດ້​ຢ່າງ​ງ່າຍ​ດາຍ​ຂອງ​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ຂະ​ຫນາດ​ໃຫຍ່​ກ​່​ວາ 4GB​.

ໃນປັດຈຸບັນພວກເຮົາມາຮອດເລື້ອຍໆ (ບໍ່ຖືກຕ້ອງ) ອ້າງວ່າບໍ່ມີຫນ່ວຍຄວາມຈໍາຫຼາຍກ່ວາ 4GB, ສະຖາປັດຕະຍະກໍາ 64-bit ແມ່ນບໍ່ມີປະໂຫຍດ. ພື້ນທີ່ທີ່ຢູ່ທີ່ໃຫຍ່ກວ່າຈະເປັນປະໂຫຍດເຖິງແມ່ນວ່າຢູ່ໃນລະບົບທີ່ມີໜ່ວຍຄວາມຈຳໜ້ອຍກໍຕາມ. ໄຟລ໌ທີ່ມີແຜນທີ່ຄວາມຈໍາເປັນເຄື່ອງມືທີ່ມີປະໂຫຍດທີ່ບາງສ່ວນຂອງເນື້ອຫາຂອງໄຟລ໌ໄດ້ຖືກເຊື່ອມຕໍ່ຢ່າງມີເຫດຜົນກັບຫນ່ວຍຄວາມຈໍາຂອງຂະບວນການໂດຍທີ່ໄຟລ໌ທັງຫມົດບໍ່ຈໍາເປັນຕ້ອງຖືກໂຫລດເຂົ້າໄປໃນຫນ່ວຍຄວາມຈໍາ. ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ, ລະບົບສາມາດຄ່ອຍໆປະມວນຜົນໄຟລ໌ຂະຫນາດໃຫຍ່ຫຼາຍເທົ່າຂອງຄວາມອາດສາມາດ RAM ໄດ້. ໃນລະບົບ 32-bit, ໄຟລ໌ຂະຫນາດໃຫຍ່ດັ່ງກ່າວບໍ່ສາມາດຖືກສ້າງແຜນທີ່ຫນ່ວຍຄວາມຈໍາໄດ້, ໃນຂະນະທີ່ຢູ່ໃນລະບົບ 64-bit, ມັນແມ່ນເຄ້ກຊິ້ນຫນຶ່ງ, ຍ້ອນພື້ນທີ່ທີ່ຢູ່ທີ່ໃຫຍ່ກວ່າ.

ຢ່າງໃດກໍຕາມ, ຂະຫນາດຂອງຕົວຊີ້ທີ່ໃຫຍ່ກວ່າຍັງນໍາເອົາຂໍ້ເສຍອັນໃຫຍ່ອັນຫນຶ່ງ: ຖ້າບໍ່ດັ່ງນັ້ນ, ໂປລແກລມທີ່ຄ້າຍຄືກັນຕ້ອງການຫນ່ວຍຄວາມຈໍາຫຼາຍໃນໂປເຊດເຊີ 64 ບິດ (ຕົວຊີ້ຂະຫນາດໃຫຍ່ເຫຼົ່ານີ້ຕ້ອງຖືກເກັບໄວ້ບ່ອນໃດຫນຶ່ງ). ເນື່ອງຈາກຕົວຊີ້ແມ່ນສ່ວນຫນຶ່ງເລື້ອຍໆຂອງໂປແກມ, ຄວາມແຕກຕ່າງນີ້ສາມາດເຮັດໃຫ້ແຄດຫນັກແຫນ້ນ, ເຊິ່ງເຮັດໃຫ້ລະບົບທັງຫມົດເຮັດວຽກຊ້າລົງ. ດັ່ງນັ້ນໃນທັດສະນະ, ພວກເຮົາສາມາດເຫັນໄດ້ວ່າຖ້າພວກເຮົາພຽງແຕ່ປ່ຽນສະຖາປັດຕະຍະກໍາຂອງໂປເຊດເຊີເປັນ 64-bit, ມັນກໍ່ຈະເຮັດໃຫ້ລະບົບທັງຫມົດຊ້າລົງ. ດັ່ງນັ້ນປັດໄຈນີ້ຕ້ອງໄດ້ຮັບການດຸ່ນດ່ຽງໂດຍການເພີ່ມປະສິດທິພາບຫຼາຍໃນສະຖານທີ່ອື່ນໆ.

ARM64

A7, ໂປເຊດເຊີ 64-bit ທີ່ໃຊ້ iPhone 5s ລຸ້ນ ໃໝ່, ບໍ່ພຽງແຕ່ເປັນໂປເຊດເຊີ ARM ປົກກະຕິທີ່ມີການລົງທະບຽນທີ່ກວ້າງກວ່າ. ARM64 ມີການປັບປຸງໃຫຍ່ກວ່າລຸ້ນເກົ່າ, 32-bit.

ໂປເຊດເຊີ Apple A7.

Registry

ARM64 ຖືການລົງທະບຽນຈໍານວນເຕັມສອງເທົ່າເທົ່າກັບ ARM 32-bit (ລະວັງບໍ່ໃຫ້ສັບສົນຈໍານວນແລະຄວາມກວ້າງຂອງການລົງທະບຽນ - ພວກເຮົາໄດ້ເວົ້າກ່ຽວກັບຄວາມກວ້າງໃນສ່ວນ "64-bit". ດັ່ງນັ້ນ ARM64 ມີທັງການລົງທະບຽນກວ້າງສອງເທົ່າແລະສອງເທົ່າ. ລົງທະບຽນ). ARM 32-bit ມີ 16 integer registers: ຫນຶ່ງ program counter (PC - ມີຈໍານວນຂອງຄໍາແນະນໍາໃນປະຈຸບັນ), stack pointer (ຕົວຊີ້ໄປຫາຫນ້າທີ່ກໍາລັງດໍາເນີນ), link register (ຕົວຊີ້ທີ່ຈະກັບຄືນຫຼັງຈາກຟັງຊັນແມ່ນ. ສໍາເລັດ), ແລະສ່ວນທີ່ເຫຼືອ 13 ແມ່ນສໍາລັບການນໍາໃຊ້ຄໍາຮ້ອງສະຫມັກ. ຢ່າງໃດກໍຕາມ, ARM64 ມີ 32 ຈໍານວນຈໍານວນລົງທະບຽນ, ລວມທັງການລົງທະບຽນສູນຫນຶ່ງ, ການລົງທະບຽນການເຊື່ອມຕໍ່, ຕົວຊີ້ກອບ (ຄ້າຍຄືກັນກັບຕົວຊີ້ stack), ແລະຫນຶ່ງສະຫງວນໄວ້ສໍາລັບອະນາຄົດ. ນີ້ເຮັດໃຫ້ພວກເຮົາມີ 28 ລົງທະບຽນສໍາລັບການນໍາໃຊ້ຄໍາຮ້ອງສະຫມັກ, ຫຼາຍກ່ວາສອງເທົ່າຂອງ 32-bit ARM. ໃນຂະນະດຽວກັນ, ARM64 ໄດ້ເພີ່ມຈໍານວນການລົງທະບຽນຈໍານວນຈຸດເລື່ອນ (FPU) ສອງເທົ່າຈາກ 16 ຫາ 32 128-bit registers.

ແຕ່ເປັນຫຍັງຈໍານວນການລົງທະບຽນຈຶ່ງມີຄວາມສໍາຄັນ? ໂດຍທົ່ວໄປແລ້ວ ຄວາມຈຳຊ້າກວ່າການຄຳນວນ CPU ແລະການອ່ານ/ຂຽນສາມາດໃຊ້ເວລາດົນຫຼາຍ. ນີ້ຈະເຮັດໃຫ້ໂປເຊດເຊີໄວຕ້ອງລໍຖ້າຄວາມຊົງຈໍາແລະພວກເຮົາຈະບັນລຸຂອບເຂດຄວາມໄວທໍາມະຊາດຂອງລະບົບ. ໂປເຊດເຊີພະຍາຍາມເຊື່ອງຄວາມພິການນີ້ດ້ວຍຊັ້ນຂອງ buffers, ແຕ່ເຖິງແມ່ນວ່າອັນທີ່ໄວທີ່ສຸດ (L1) ຍັງຊ້າກວ່າການຄິດໄລ່ຂອງໂປເຊດເຊີ. ຢ່າງໃດກໍຕາມ, ການລົງທະບຽນແມ່ນຈຸລັງຫນ່ວຍຄວາມຈໍາໂດຍກົງໃນໂປເຊດເຊີແລະການອ່ານ / ຂຽນຂອງພວກເຂົາໄວພໍທີ່ຈະບໍ່ຊ້າລົງຂອງໂປເຊດເຊີ. ຈໍານວນການລົງທະບຽນປະຕິບັດຫມາຍຄວາມວ່າຈໍານວນຫນ່ວຍຄວາມຈໍາທີ່ໄວທີ່ສຸດສໍາລັບການຄິດໄລ່ຂອງໂປເຊດເຊີ, ເຊິ່ງມີຜົນກະທົບຢ່າງຫຼວງຫຼາຍຕໍ່ຄວາມໄວຂອງລະບົບທັງຫມົດ.

ໃນຂະນະດຽວກັນ, ຄວາມໄວນີ້ຕ້ອງການການສະຫນັບສະຫນູນການເພີ່ມປະສິດທິພາບທີ່ດີຈາກ compiler, ເພື່ອໃຫ້ພາສາສາມາດນໍາໃຊ້ການລົງທະບຽນເຫຼົ່ານີ້ແລະບໍ່ຈໍາເປັນຕ້ອງເກັບທຸກສິ່ງທຸກຢ່າງຢູ່ໃນຄໍາຮ້ອງສະຫມັກທົ່ວໄປ (ຄວາມຈໍາຊ້າ).

ຊຸດຄໍາແນະນໍາ

ARM64 ຍັງນໍາເອົາການປ່ຽນແປງທີ່ສໍາຄັນໃຫ້ກັບຊຸດຄໍາແນະນໍາ. ຊຸດຄໍາແນະນໍາແມ່ນຊຸດຂອງການປະຕິບັດປະລໍາມະນູທີ່ໂຮງງານຜະລິດສາມາດປະຕິບັດໄດ້ (ເຊັ່ນ: 'ADD register1 register2' ເພີ່ມຕົວເລກໃນສອງ register). ຫນ້າທີ່ສາມາດໃຊ້ໄດ້ກັບແຕ່ລະພາສາແມ່ນປະກອບດ້ວຍຄໍາແນະນໍາເຫຼົ່ານີ້. ຫນ້າທີ່ສະລັບສັບຊ້ອນຫຼາຍຕ້ອງປະຕິບັດຄໍາແນະນໍາເພີ່ມເຕີມ, ດັ່ງນັ້ນພວກເຂົາສາມາດຊ້າລົງ.

ໃໝ່ໃນ ARM64 ແມ່ນຄຳແນະນຳສຳລັບການເຂົ້າລະຫັດ AES, SHA-1 ແລະ SHA-256 hash functions. ດັ່ງນັ້ນ, ແທນທີ່ຈະເປັນການປະຕິບັດທີ່ສັບສົນ, ມີພຽງແຕ່ພາສາເທົ່ານັ້ນທີ່ຈະເອີ້ນຄໍາແນະນໍານີ້ - ເຊິ່ງຈະເຮັດໃຫ້ຄວາມໄວໃນການຄິດໄລ່ຫນ້າທີ່ດັ່ງກ່າວແລະຫວັງວ່າຈະເພີ່ມຄວາມປອດໄພໃນແອັບພລິເຄຊັນ. ຕົວຢ່າງ: Touch ID ໃຫມ່ຍັງໃຊ້ຄໍາແນະນໍາເຫຼົ່ານີ້ໃນການເຂົ້າລະຫັດ, ຊ່ວຍໃຫ້ມີຄວາມໄວແລະຄວາມປອດໄພທີ່ແທ້ຈິງ (ໃນທາງທິດສະດີ, ຜູ້ໂຈມຕີຈະຕ້ອງດັດແປງໂປເຊດເຊີຕົວເອງເພື່ອເຂົ້າເຖິງຂໍ້ມູນ - ເຊິ່ງມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະເວົ້າວ່າຂະຫນາດນ້ອຍໆຂອງມັນ).

ຄວາມເຂົ້າກັນໄດ້ກັບ 32bit

ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະກ່າວເຖິງວ່າ A7 ສາມາດດໍາເນີນການໄດ້ຢ່າງເຕັມສ່ວນໃນໂຫມດ 32-bit ໂດຍບໍ່ຕ້ອງໃຊ້ການຈໍາລອງ. ມັນຫມາຍຄວາມວ່າ iPhone 5s ໃຫມ່ສາມາດດໍາເນີນການຄໍາຮ້ອງສະຫມັກທີ່ລວບລວມຢູ່ໃນ 32-bit ARM ໂດຍບໍ່ມີການຊ້າລົງ. ຢ່າງໃດກໍ່ຕາມ, ຫຼັງຈາກນັ້ນມັນບໍ່ສາມາດໃຊ້ຟັງຊັນ ARM64 ໃໝ່ໄດ້, ສະນັ້ນມັນຄຸ້ມຄ່າສະເໝີທີ່ຈະສ້າງແບບພິເສດສະເພາະສຳລັບ A7, ເຊິ່ງຄວນແລ່ນໄວຂຶ້ນຫຼາຍ.

ການປ່ຽນແປງເວລາແລ່ນ

Runtime ແມ່ນລະຫັດທີ່ເພີ່ມຫນ້າທີ່ໃຫ້ກັບພາສາການຂຽນໂປລແກລມ, ເຊິ່ງມັນສາມາດນໍາໃຊ້ໄດ້ໃນຂະນະທີ່ແອັບພລິເຄຊັນກໍາລັງເຮັດວຽກ, ຈົນກ່ວາຫຼັງຈາກການແປ. ເນື່ອງຈາກ Apple ບໍ່ຈໍາເປັນຕ້ອງຮັກສາຄວາມເຂົ້າກັນໄດ້ຂອງແອັບພລິເຄຊັນ (ວ່າ binary 64-bit ເຮັດວຽກຢູ່ໃນ 32-bit), ເຂົາເຈົ້າສາມາດທີ່ຈະປັບປຸງພາສາ Objective-C ໄດ້.

ຫນຶ່ງໃນນັ້ນແມ່ນອັນທີ່ເອີ້ນວ່າ tagged pointer (ຕົວຊີ້ບອກ). ໂດຍປົກກະຕິ, ວັດຖຸແລະຕົວຊີ້ໄປຫາວັດຖຸເຫຼົ່ານັ້ນຈະຖືກເກັບໄວ້ໃນສ່ວນຂອງຫນ່ວຍຄວາມຈໍາແຍກຕ່າງຫາກ. ຢ່າງໃດກໍຕາມ, ປະເພດຕົວຊີ້ໃຫມ່ອະນຸຍາດໃຫ້ຫ້ອງຮຽນທີ່ມີຂໍ້ມູນຫນ້ອຍທີ່ຈະເກັບຮັກສາວັດຖຸໂດຍກົງໃນຕົວຊີ້. ຂັ້ນຕອນນີ້ກໍາຈັດຄວາມຈໍາເປັນໃນການຈັດສັນຫນ່ວຍຄວາມຈໍາໂດຍກົງສໍາລັບວັດຖຸ, ພຽງແຕ່ສ້າງຕົວຊີ້ແລະວັດຖຸພາຍໃນມັນ. ຕົວຊີ້ tagged ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ໃນສະຖາປັດຕະຍະກໍາ 64-bit ເນື່ອງຈາກຄວາມຈິງທີ່ວ່າບໍ່ມີພື້ນທີ່ພຽງພໍໃນຕົວຊີ້ 32-bit ເພື່ອເກັບຮັກສາຂໍ້ມູນທີ່ເປັນປະໂຫຍດພຽງພໍ. ດັ່ງນັ້ນ, iOS, ບໍ່ເຫມືອນກັບ OS X, ຍັງບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນຄຸນນະສົມບັດນີ້. ຢ່າງໃດກໍຕາມ, ກັບການມາເຖິງຂອງ ARM64, ນີ້ແມ່ນການປ່ຽນແປງ, ແລະ iOS ໄດ້ຈັບໄດ້ກັບ OS X ໃນເລື່ອງນີ້ເຊັ່ນດຽວກັນ.

ເຖິງແມ່ນວ່າຕົວຊີ້ຍາວ 64 ບິດ, ໃນ ARM64 ພຽງແຕ່ 33 ບິດຖືກນໍາໃຊ້ສໍາລັບທີ່ຢູ່ຂອງຕົວຊີ້. ແລະຖ້າພວກເຮົາສາມາດຍົກເລີກການປິດບັງຈຸດທີ່ເຫລືອຂອງຕົວຊີ້, ພວກເຮົາສາມາດໃຊ້ພື້ນທີ່ນີ້ເພື່ອເກັບຂໍ້ມູນເພີ່ມເຕີມ - ເຊັ່ນດຽວກັບກໍລະນີຂອງຕົວຊີ້ທີ່ລະບຸໄວ້. Conceptually, ນີ້ແມ່ນຫນຶ່ງໃນການປ່ຽນແປງທີ່ໃຫຍ່ທີ່ສຸດໃນປະຫວັດສາດຂອງ Objective-C, ເຖິງແມ່ນວ່າມັນບໍ່ແມ່ນລັກສະນະຕະຫຼາດ - ດັ່ງນັ້ນຜູ້ໃຊ້ສ່ວນໃຫຍ່ຈະບໍ່ຮູ້ວ່າ Apple ກໍາລັງກ້າວໄປຂ້າງຫນ້າ Objective-C ແນວໃດ.

ສໍາລັບຂໍ້ມູນທີ່ເປັນປະໂຫຍດທີ່ສາມາດຖືກເກັບໄວ້ໃນພື້ນທີ່ທີ່ຍັງເຫຼືອຂອງຕົວຊີ້ tagged ເຊັ່ນ Objective-C, ສໍາລັບການຍົກຕົວຢ່າງ, ປະຈຸບັນກໍາລັງໃຊ້ມັນເພື່ອເກັບຮັກສາອັນທີ່ເອີ້ນວ່າ. ຈຳນວນອ້າງອີງ (ຈໍານວນຂອງການອ້າງອິງ). ກ່ອນຫນ້ານີ້, ຈໍານວນການອ້າງອິງໄດ້ຖືກເກັບໄວ້ໃນສະຖານທີ່ທີ່ແຕກຕ່າງກັນໃນຫນ່ວຍຄວາມຈໍາ, ໃນຕາຕະລາງ hash ກະກຽມສໍາລັບມັນ, ແຕ່ນີ້ສາມາດເຮັດໃຫ້ລະບົບທັງຫມົດຊ້າລົງໃນກໍລະນີທີ່ມີຈໍານວນຫລາຍຂອງການໂທ alloc/dealloc/retain/release. ຕາຕະລາງຕ້ອງຖືກລັອກເນື່ອງຈາກຄວາມປອດໄພຂອງກະທູ້, ດັ່ງນັ້ນຈໍານວນການອ້າງອິງຂອງສອງວັດຖຸໃນສອງກະທູ້ບໍ່ສາມາດປ່ຽນແປງໄດ້ໃນເວລາດຽວກັນ. ຢ່າງໃດກໍ່ຕາມ, ມູນຄ່ານີ້ຖືກໃສ່ໃຫມ່ເຂົ້າໄປໃນສ່ວນທີ່ເຫຼືອຂອງອັນທີ່ເອີ້ນວ່າ isa ຕົວຊີ້ວັດ. ນີ້​ເປັນ​ອີກ​ປະ​ການ​ຫນຶ່ງ​ທີ່​ບໍ່​ເຫັນ​ໄດ້​ຊັດ​ເຈນ​, ແຕ່​ຄວາມ​ໄດ້​ປຽບ​ທີ່​ໃຫຍ່​ຫຼວງ​ແລະ​ຄວາມ​ເລັ່ງ​ໃນ​ອະ​ນາ​ຄົດ​. ຢ່າງໃດກໍຕາມ, ນີ້ບໍ່ສາມາດບັນລຸໄດ້ໃນສະຖາປັດຕະ 32-bit.

ຂໍ້ມູນກ່ຽວກັບວັດຖຸທີ່ກ່ຽວຂ້ອງ, ບໍ່ວ່າຈະເປັນວັດຖຸທີ່ອ້າງອີງອ່ອນໆ, ບໍ່ວ່າຈະມີຄວາມຈໍາເປັນໃນການສ້າງຕົວທໍາລາຍສໍາລັບວັດຖຸ, ແລະອື່ນໆ, ຍັງຖືກໃສ່ໃຫມ່ເຂົ້າໄປໃນສະຖານທີ່ທີ່ຍັງເຫຼືອຂອງຕົວຊີ້ໄປຫາວັດຖຸ. ຂໍຂອບໃຈກັບຂໍ້ມູນນີ້, Objective-C. runtime ສາມາດເລັ່ງເວລາແລ່ນໂດຍພື້ນຖານ, ເຊິ່ງສະທ້ອນໃຫ້ເຫັນໃນຄວາມໄວຂອງແຕ່ລະແອັບພລິເຄຊັນ. ຈາກການທົດສອບ, ນີ້ຫມາຍຄວາມວ່າປະມານ 40-50% ຄວາມໄວຂອງການໂທການຄຸ້ມຄອງຫນ່ວຍຄວາມຈໍາທັງຫມົດ. ພຽງແຕ່ໂດຍການປ່ຽນໄປຫາຕົວຊີ້ 64-bit ແລະໃຊ້ພື້ນທີ່ໃຫມ່ນີ້.

ສະຫຼຸບ

ເຖິງແມ່ນວ່າຄູ່ແຂ່ງຈະພະຍາຍາມເຜີຍແຜ່ຄວາມຄິດທີ່ວ່າການເຄື່ອນຍ້າຍໄປສູ່ສະຖາປັດຕະຍະກໍາ 64-bit ແມ່ນບໍ່ຈໍາເປັນ, ທ່ານຈະຮູ້ແລ້ວວ່ານີ້ແມ່ນພຽງແຕ່ຄວາມຄິດເຫັນທີ່ບໍ່ມີຂໍ້ມູນຫຼາຍ. ມັນເປັນຄວາມຈິງທີ່ວ່າການປ່ຽນໄປໃຊ້ 64-bit ໂດຍບໍ່ມີການດັດແປງພາສາຫຼືຄໍາຮ້ອງສະຫມັກຂອງທ່ານບໍ່ໄດ້ຫມາຍຄວາມວ່າຫຍັງ - ມັນກໍ່ເຮັດໃຫ້ລະບົບທັງຫມົດຊ້າລົງ. ແຕ່ A7 ໃຫມ່ໃຊ້ ARM64 ທີ່ທັນສະໄຫມກັບຊຸດຄໍາແນະນໍາໃຫມ່, ແລະ Apple ໄດ້ເອົາບັນຫາໃນການປັບປຸງພາສາ Objective-C ທັງຫມົດໃຫ້ທັນສະໄຫມແລະໃຊ້ປະໂຫຍດຈາກຄວາມສາມາດໃຫມ່ - ດັ່ງນັ້ນຄວາມໄວທີ່ສັນຍາໄວ້.

ໃນທີ່ນີ້ພວກເຮົາໄດ້ກ່າວເຖິງເຫດຜົນຈໍານວນຫລາຍວ່າເປັນຫຍັງສະຖາປັດຕະຍະກໍາ 64-bit ແມ່ນບາດກ້າວທີ່ຖືກຕ້ອງ. ມັນແມ່ນການປະຕິວັດອີກອັນຫນຶ່ງ "ພາຍໃຕ້ຜ້າມ່ານ", ຍ້ອນ Apple ຈະພະຍາຍາມຢູ່ແຖວຫນ້າບໍ່ພຽງແຕ່ມີການອອກແບບ, ການໂຕ້ຕອບຜູ້ໃຊ້ແລະລະບົບນິເວດທີ່ອຸດົມສົມບູນ, ແຕ່ສ່ວນໃຫຍ່ແມ່ນມີເຕັກໂນໂລຢີທີ່ທັນສະໄຫມທີ່ສຸດໃນຕະຫຼາດ.

ທີ່ມາ: mikeash.com
.