ããªãã«ãšã£ãŠäœãããé
åçã ãšæããŸããïŒæ°ããèå³æ·±ãã¿ã¹ã¯ã«çŽé¢ããéèŠãªã¢ã«ãŽãªãºã ãéçºããããããèšèªããå¥ã®èšèªã«æ¢åã®ããžãã¯ãæžãæããŠãç¹å®ã®APIã®å¥åŠãªæ©èœãšæŠããŸããïŒ ç§ã¯çŽ8幎éã¢ãã€ã«éçºã«æºãã£ãŠãããããããããšãªãæåã®ãªãã·ã§ã³ãéžæããŠããŸãããAPIãšæŠãããšã奜ãã§ãã ç§ã«åæããããæåã®åé¡ã«å¯ŸåŠãã2çªç®ã®åé¡ãæå°åããæ¹æ³ããŸã ç¥ããªã人ã¯ãç«ã®äžãèŠãã®ã¯é¢çœãã§ãããã
ãã®èšäºã§ã¯ã移æ€ã®äžè¬ååã«é¢ããç§ã®èããå
±æããŸãã AndroidãŸãã¯iOSçšã®ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ãœãããŠã§ã¢å®è£
ã®ãžã£ã³ã°ã«ã«ã¯å
¥ããŸããã ã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªããã€ã¹ã«ç°¡åã«è»¢éããã¯ãã¹ãã©ãããã©ãŒã ãšåŒã°ããããã«ããæ¹æ³ã説æããããšæããŸãã
ã¢ã¯ã·ã§ã³ãã©ã³
æåã«ãã¿ã¹ã¯ã®ç¯å²ãå®çŸ©ããŸãã ãã®èšäºã§ã¯ãçµã¿èŸŒã¿ã·ã¹ãã ã«ã€ããŠã¯è§ŠããŸãããçµã¿èŸŒã¿ã·ã¹ãã ã¯ãééããªãã¢ãã€ã«ãã¯ãããžãŒã®å©çã®ããã«ãæ©èœããŸãã ææ°ã®ã¢ãã€ã«ããã€ã¹ã§ããé»è©±ãšã¿ãã¬ããã®ã¿ãæ€èšããŸãã èšäºã®æåã®éšåã¯ãçŸä»£ã®ã¢ãã€ã«ããã»ããµã®ã¢ãŒããã¯ãã£ãšå¶éããããŠéã«ãã¢ãã€ã«éçºè
ããããããåãåãæ©èœã«ã€ããŠèª¬æããŸãã 第äºéšã§ã¯ã移æ€å¯èœãªã³ãŒããæžãããã«å¿
èŠãªããã€ãã®åºæ¬çãªããªãã¯ã«ã€ããŠã話ããŸãã
CPU
5幎åãããã»ã©åã§ã¯ãªãããç¬èªã®ã¢ãŒããã¯ãã£ãåããã¢ãã€ã«ããã»ããµã補é ããããŸããŸãªäŒæ¥ããããŸããã ãã ããã¡ã€ã³ã¢ãŒããã¯ãã£ã¯çæã§æ°ããããšãã§ããããããŸã äœè£ããããŸãã ãŸããARMã§ãã ããã«å ããŠãéåžžJava NDKã«å«ãŸããŠããMIPSãšãAtomãåããIntelããããŸãã
åŸã§èª¬æãããã¹ãŠã®æ¹æ³ã¯ãããããã¹ãŠã®ã·ã¹ãã ã«é©çšã§ããŸãã ãããã䟿å®äžãæãäžè¬çãªARMããã»ããµã®äŸã§ããããæ€èšããŸãã ãããã«ã€ããŠäœãç¥ãå¿
èŠããããŸããïŒ
- åæ¥ç芳ç¹ããïŒ ã³ã¢ã©ã€ã»ã³ã¹ ã ã©ã€ã»ã³ã¹ã賌å
¥ããŠãç¬èªã®ããã»ããµãäœæã§ããŸãã
- æè¡çãªèŠ³ç¹ããïŒã·ã¹ãã ãªã³ãããïŒSystem On ChipïŒ ã ãã¹ãŠã®ã¢ãžã¥ãŒã«ã¯1ãæã§çµã¿ç«ãŠãããŸãã
- ãœãããŠã§ã¢éçºè
ã®èŠ³ç¹ããïŒåŒ·åãªRISCã¢ãŒããã¯ãã£
å
èš±
ARMèªäœã¯ããã»ããµããªãªãŒã¹ããããªãªãŒã¹ã©ã€ã»ã³ã¹ã販売ããããŸããŸãªäŒæ¥ïŒSamsungãLGãBroadcomãAppleãQualcommãFreescaleïŒãã©ã€ã»ã³ã¹ã賌å
¥ããŠãã·ã³ã°ã«ã³ã¢ãŸãã¯ãã«ãã³ã¢ã®ããã»ããµã®ããŒãžã§ã³ã奜ããªããã«ãªãªãŒã¹ããŸãã
ã©ã€ã»ã³ã¹ãäžãããã®ã¯äœã§ããïŒ ã«ãŒãã«ãååŸããã ãã§ãªããããã»ããµãäœæããŸãã ããªãã¯ãããæ¹è¯ããããšãã§ããŸãïŒæ¹åããããéã«åçŽåããŸã-ããã¯ããªãã®æš©å©ã§ãã ç©èªã®äŸã¯ã
XScaleããã»ããµãæèŒããæåãªIntel
ã§ã ã 圌ãã¯v5TEã®ã©ã€ã»ã³ã¹ã賌å
¥ããçå£ã«äœãçŽããŸããã ç§ã®æèŠã§ã¯ãããã¯æ¢åã®åŠçã®äžã§ãããŸã§ã§æãæåãããã®ã§ãã 圌ãã¯ã¡ã¢ãªã䜿ã£ãäœæ¥ãæ¹åãããã£ãã·ã¥ãå¢ããããããŠv5TEã«åºã¥ããIntelãšSamsungã®å®è£
ãæ¯èŒãããšãIntelã¯ãããã2ååã¡ãŸããã ãã®ããã»ããµã®äž»ãªæ©èœã¯ã40ãããããããªãæèŒããã³ããã»ããµãåããŠç»å Žããããšã§ã1ã¯ããã¯ã§4ã€ã®æ°å€ãä¹ç®ã§ããããã«ãªããå€ãããã»ããµã«ã¯åŒ·åãªSIMDåœä»€ã»ãããæäŸããã¯ã€ã€ã¬ã¹MMXã³ããã»ããµãæèŒãããŸãã
ã·ã¹ãã ãªã³ããã
ãšã³ãžãã¢ã®èŠ³ç¹ããèŠããšãã·ã¹ãã ãªã³ããããšã¯äœã§ããïŒ ããã¯ãããŸããŸãªããã€ã¹ãã€ã³ã¹ããŒã«ãããŠããå°ããªãã€ã¯ãããã»ããµã§ãã ARMããã©ã€ã»ã³ã¹ã賌å
¥ããããã«1ã€ã2ã€-å¿
èŠãªã«ãŒãã«ã®æ°ãå
¥åããŸãã è¿œå ã®ã³ããã»ããµïŒã°ã©ãã£ãã¯ãDSPãªã©ïŒãã¡ã¢ãªïŒROMããã©ãã·ã¥ãªã©ïŒããã«ãå¿
èŠã«å¿ããŠãéåžžã¯I / Oã€ã³ã¿ãŒãã§ã€ã¹ãã€ãŒãµããããUSBãCOMããŒãã«æ¿å
¥ãããŸãã ãã®ãã¹ãŠãæ©èœãããããã«ããªã·ã¬ãŒã¿ãŒãšã¿ã€ããŒãåãã¯ãªã¹ã¿ã«ã«è¿œå ãããããŒãäžã®åã
ã®ãããã¯ã®è¿œå ã®ã¹ãã©ãããåºãªãããã«ããŸãã
ARMã§ã¯ãåãPentiumãšæ¯èŒããŠãã©ã³ãžã¹ã¿ã®æ°ãéåžžã«å°ãªããããã·ã¹ãã ããããã«å®è£
ããããšãå¯èœã«ãªããŸããã ãã®ããããããäžã®ã¹ããŒã¹ãã»ãšãã©å æãããæè¡çã«ã¯éçºè
ãããã«æããã®ãã¹ãŠã«é©åããããšãå€æããŸããã ãããã®ãã¹ãŠã®ãŠããããCore i5ã«é©åãããããšã¯ã§ãããã«ãããŸãã-ããèªäœã倧ããã倧ããªã©ãžãšãŒã¿ãŒã䜿çšããŠããå Žåã§ãïŒå€ãã®ãã©ã³ãžã¹ã¿ãããããã¹ãŠãéåžžã«ç±ããªãããïŒã
RISCã¢ãŒããã¯ãã£
éçºè
ã«ãšã£ãŠéèŠãªã¢ãŒããã¯ãã£æ©èœãæ€èšããŠãã ããã
- ãŸãã ããŒã/ã¹ãã¢ã¢ãŒããã¯ãã£ã§ãã ãã¹ãŠã®æäœã¯ãã¬ãžã¹ã¿ã䜿çšããŠå®è¡ãããŸããããŒãæžã¿-ã«ãŠã³ãæžã¿-ã¢ããããŒãæžã¿ããã®ä»ã¯ãããŸããã ã¡ã¢ãªå
ã®ãªãã©ã³ãã䜿çšããŠæŒç®ãå®è¡ããããšã¯ã§ããŸããã
- ã¬ãžã¹ã¿ã確å®ã«äœ¿çšããããã«ãã«ãŒãã«ã«ã¯å€§ããªã¬ãžã¹ã¿ãã¡ã€ã«ããããŸãïŒ32ãããã®16ã¬ãžã¹ã¿ïŒ ã ãããã¯ååãšããŠåçã§ãã ãã¡ãããç®çãæ瀺ããŠããããã«èŠããç¹æ®ãªååãæã€ãã®ããããŸãããä»»æã®ã¬ãžã¹ã¿ã«é¢é£ãããã¹ãŠã®æäœã«ã¢ã¯ã»ã¹ã§ããŸãã
- åºå®ã³ãã³ãé· ã ARMã¢ãŒãã§ã¯ãããã¯éåžž32ãããã§ãïŒ1ã³ãã³ã-1ã¯ãŒãã次ã
ã äœãå€ãããããã¹ãŠãäºæž¬å¯èœã§ãããããã³ã³ãã¢ã¯ç¢ºãã«ãã®äºå®ã«æºè¶³ããŠããŸãã
- ARMã®æ©èœã®1ã€ã¯ãã¡ã¢ãªãªãã»ããã«ã¢ã¯ã»ã¹ããã ãã§ãªããããªã€ã³ã¯ãªã¡ã³ããã¬ãžã¹ã¿å
ã®ãªãã»ããä»ããã¹ãã€ã³ã¯ãªã¡ã³ãããŸãã¯çŽæ¥æ°å€åœ¢åŒã§ã¡ã¢ãªããèªã¿èŸŒã¿ãããŒãããæ©èœã§ãã 匷åãªã¢ãã¬ã¹æå®ããŒã -ARMã®æãéèŠãªæ©èœã®1ã€
- ãã¹ãŠã®æäœã¯1ããŒãã§å®äºããåŸåããããŸãã å€ããå°ãªãã-ãããã¯ç°ãªãã³ã¢ã®ãã¥ã¢ã³ã¹ã§ãã
- ARMã®ãã1ã€ã®åªããæ©èœã¯ã æ¡ä»¶ä»ãå®è¡ã§ãã åœä»€ïŒç®è¡æŒç®ããŸãã¯åã«ãã©ã°ããã§ãã¯ããïŒãäœæãããšãããã©ã°ã¯ãŸã ããã次ã®æäœã¯æ¡ä»¶ãæºããããå Žåã«ã®ã¿å®è¡ãããŸãã ãããã£ãŠã倧èŠæš¡ãªç§»è¡ãè¡ãå¿
èŠã¯ãããŸããã ããã¯éåžžã«äŸ¿å©ã§ããçç£æ§ãåäžãããªãããã³ã³ãã¢ããªã»ããããŸããã
- ã¯ã€ãã¯ã·ããã ARMã§ã¯ãã·ããä»ãã®ç®è¡æŒç®ãå®è¡ã§ããŸãã+ =ïŒj << 2ïŒ; 1ã€ã®ã³ãã³ãã«å€æããã1ã€ã®ãµã€ã¯ã«ã§å®è¡ãããŸãã
ARMãã¡ããªãŒ
ARMãã¡ããªã®éçºãšé²æ©ïŒ
- ARM9ãããŒã¹ãšèŠãªãããŸãã ããã¯éå»ã®ãã®ã§ããã䜿çšãããŠããŸãããææ°ã®æºåž¯é»è©±ã§ã¯äœ¿çšãããŠããŸããã
- ARM9Eã¯ãŸã Androidã«å«ãŸããŠããããããããèæ
®ããå¿
èŠããããŸãã ARM9Eã¯ãé³å£°åŠçã¢ã«ãŽãªãºã ã倧å¹
ã«é«éåããDSPåœä»€ãå°å
¥ããŸããã
- ARM10ã³ã¢ã¯ã»ãšãã©æ°ä»ãããŸããã§ããã
- ARM11ã«åºã¥ããŠããŸããŸãªããã€ã¹ãç»å ŽããŸããããæåã®iPhoneã¯æã象城çãªããã€ã¹ã§ããã ããã§ã®é©æ°ã¯ãXScaleã®Intelã®ã¯ã€ã€ã¬ã¹MMXããã匱ããã®ã®ãSIMDåœä»€ã®åºçŸã§ããã
- Cortexã¯ããããŸã§ã§æãäžè¬çãªã³ã¢ã§ãã ãã«ãã³ã¢Cortex A9ã·ã¹ãã ã§ãã·ã³ã°ã«ã³ã¢Cortex A8ã·ã¹ãã ã§ãããŸããŸããããã¢ãŒããã¯ãã£ã¯åãã§ãARMv7ã§ãã ããã§ãARMã¯NEONãšåŒã°ããå°ããªé©åœãèµ·ãããŸããã ããã¯ãARMv7ã¢ãŒããã¯ãã£ã«å«ãŸããŠããŸããããããäžã«ãªãå Žåãããç¬ç«ããã³ããã»ããµã§ãã NEONã®æ©èœã¯ã䞊åã®å ç®ãæžç®ãã·ãããããã³é£œåãæäŸãã64ãããããã³128ãããã®ã³ãã³ãã®ååšã§ãã ARMãæ¬æ ŒçãªSIMDãåããŠããã®ã¯ããã«ãããããžã¿ã«ä¿¡å·ãåŠçãããšãã«é«éåãå®çŸããŸãã
- ARMã¯ããæããæªæ¥ããã€ãŸãARMv8ã¢ãŒããã¯ãã£ãåãã64ãããCortex-A50ã³ã¢ãçºè¡šããŸããã ãããã¯ã以åã®åå¥ã®32ãããã¢ãŒãã§ã®ãã¹ãŠãšã®å®å
šãªäºææ§ãçŽæããŸãã
芪æ
åã®æ®µèœã®è¡šã®æåŸã®è¡ã«ã€ããŠåå¥ã«èª¬æããŸãã 芪æãšã¯äœã§ããïŒ ããã¯å
ã
ãããã±ãŒãžåãããARMåœä»€ã®ã»ããã§ããã ã³ãŒãã®é床ãšã³ã³ãã¯ããã®éã§2çªç®ãéžæããå Žåãæ©èœãå¶éãããçã16ãããåœä»€ãåªãããœãªã¥ãŒã·ã§ã³ã§ãã
Thumb2ã¯ãThumbã®é²åçã§ãã ARMåœä»€ã®äžéšãå«ãŸããŠãããThumbã®ããã«ã³ãŒãå¯åºŠã確ä¿ããåæã«æ¬æ ŒçãªARMã®ããã©ãŒãã³ã¹ãç¶æããããã«èšèšããã16ãããããã³32ãããã®åœä»€ã®ã»ããã§æ§æãããŠããŸãã
ã¯ãã¹ãã©ãããã©ãŒã
ç§ã¯èªç±ã«ã¯ãã¹ãã©ãããã©ãŒã ãå®çŸ©ããŸãïŒãã¯ãã¹ãã©ãããã©ãŒã ã³ãŒãã¯ãå¥ã®ã·ã¹ãã ã«è»¢éããã³ã¹ããããã®ã³ãŒãããŒãããæžãã³ã¹ãããã¯ããã«å°ãªãã³ãŒããšèããããšãã§ããŸããã ã€ãŸãããããçš®ã®ã¢ã«ãŽãªãºã ããããiOSã§ãåãããšããããã®ã§ããã®ãã©ãããã©ãŒã ã§ãåãããšãããªããã°ãªããªãããšããç¶æ³ã移æ€ããããšã¯ããŸããã ããã¯ç§»æ€ã§ã¯ãªããæžãçŽãã§ãã ã¢ã«ãŽãªãºã ã移æ€ããã«ã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®æ¡ä»¶ãæºããå¿
èŠããããŸãã
ã¯ãã¹ãã©ãããã©ãŒã ã³ãŒããèšè¿°ããååããåé¢ãšçµ±åããšå®çŸ©ããŸãã ç§ã¯ãããäœã§ãããã説æããããšããŸãã ãããã®ç¹ã¯ä»®å®ã§ã¯ãªãããããç§ã®ããžã§ã³ã§ãã
- ãŸãã çµ±äžãããåä»ã -çµã¿èŸŒã¿ã®ãã€ãã£ãåã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªãå¯èœæ§ããããããåäžåã§ã³ãŒããèšè¿°ããããšãéèŠã§ã
- ã³ãŒãã®ã¢ã«ãŽãªãºã éšåãšéã¢ã«ãŽãªãºã éšåãžã®åé¢ã ã¢ã«ãŽãªãºã ã¯ã·ã¹ãã ã³ãŒã«ãšåºæ¬æäœãååŸããŸã
- ããŒããŠã§ã¢äŸåéšå ïŒããã°ã©ã ãã¢ã«ãŽãªãºã éšåïŒæ°åŠïŒãšã·ã¹ãã ã«äŸåããéšåã«åå²ããŸã
åé
ç®ã«ã€ããŠè©³ããèŠãŠãããŸãããã
ã·ã³ã°ã«ã¿ã€ãã³ã°
#if defined(_MSC_VER) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef signed __int64 int64_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned __int64 uint64_t; #elif defined(LINUX_ARM) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef signed long long int64_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long long uint64_t; #else #include <stdint.h> #endif
åäžã®é¡ååãšã¯ã©ãããæå³ã§ããïŒ ã¿ã€ããå®çŸ©ããã ãã§ãã äžèšã®äŸã§ã¯ãstdintã«ã€ããŠèª¬æããŠããŸãã Microsoftã³ã³ãã€ã©ãŒããã³Linuxçšã«å®çŸ©ãããŠããŸãã ããã«å¶åŸ¡ãããå Žåã¯ããmy_love_int8ãããmy_love_int16ããšèšè¿°ããããã°ã©ã ã§ãããã®ã¿ã€ãã䜿çšã§ããŸãã ããã¯ãããšãã°ããããã¯ãŒã¯ã§äœæ¥ããå Žåã«éåžžã«åœ¹ç«ã¡ãŸããæã£ãŠãããã¹ãŠã®ãã±ãããint16ã§ããããããã®éã®è·é¢ã0ã§ããããªãã»ãããä»ã®äœããªãããšãåžžã«ç¢ºä¿¡ããŠããŸãã çµå±ã®ãšãããçªç¶2ãã€ãã«ãªãcharãä»ããŠãã¹ãŠãå®çŸ©ãããšããã¹ãŠãã©ããééã£ãæ¹åã«é²ã¿ãŸãã
struct NetworkStatistics { uint16_t currentBufferSize; uint16_t preferredBufferSize; uint16_t currentPacketLossRate; uint16_t currentDiscardRate; uint16_t currentExpandRate; uint16_t currentPreemptiveRate; uint16_t currentAccelerateRate; };
ãŸãããã©ãããã©ãŒã /ã³ã³ãã€ã©/èšèªã®ããŒãžã§ã³ã«äŸåããã³ãŒãã®èªã¿æžããç°¡çŽ åããããã«ãç¬èªã®çµ±äžå®çŸ©ãå°å
¥ããããšã¯éåžžã«äŸ¿å©ã§ãã ãªã©ïŒ
#if defined(__APPLE__) # ifdef TARGET_OS_IPHONE # define MAILRU_OS_IOS # elif defined(TARGET_IPHONE_SIMULATOR) # define MAILRU_OS_IOS # define MAILRU_OS_IOS_SIMULATOR # elif defined(TARGET_OS_MAC) || defined (__OSX__) # define MAILRU_OS_MACOSX # else # define MAILRU_OS_MACOSX # endif #elif defined(_WIN64) # define MAILRU_OS_WIN64 # define MAILRU_OS_WINDOWS #elif _WIN32 # define MAILRU_OS_WIN32 # define MAILRU_OS_WINDOWS #elif ANDROID # define MAILRU_OS_ANDROID #else # error Unsupported OS target! #endif #if defined(_M_X64) || defined(__x86_64__) # define MAILRU_ARCH_X86_FAMILY # define MAILRU_ARCH_64_BIT #elif defined(__ARMEL__) || defined(__arm) || defined(_M_ARM_FP) # define MAILRU_ARCH_ARM_FAMILY # define MAILRU_ARCH_32_BIT #elif defined(__ppc__) # define MAILRU_ARCH_PPC_FAMILY # define MAILRU_ARCH_32_BIT #else # error Please add support for your architecture in typedefs.h #endif
ã¢ã«ãŽãªãºã
ç§ã®ç·Žç¿ã§ã¯ãé³å£°ã³ãŒããã¯ããããªã³ãŒããã¯ãªã©ãå€ãã®éãã¢ã«ãŽãªãºã ããããŸããã 移æ€ã容æã«ããããã«ãã¢ã«ãŽãªãºã ãã·ã¹ãã é¢æ°ã䜿çšããªãããšãæãŸãããã·ã¹ãã ã©ã€ãã©ãªããŸã£ãã䜿çšããªãããšãããã«æãŸããã§ãã
ã·ã¹ãã ã³ãŒã«
移æ€å¯èœãªãããŒãžã³ãŒããèšè¿°ããããã®åºæ¬ååã®1ã€ã¯ãã¢ã«ãŽãªãºã å
ã§mallocã䜿çšããªãããšã§ãã ã¢ã«ãŽãªãºã ã¯å¿
èŠãªã¡ã¢ãªéã決å®ãããã®å€ãã¡ã¢ãªãããŒãžã£ã«æž¡ããŸããã¡ã¢ãªãããŒãžã£ã¯åæåäžã«ã¡ã¢ãªãæ¢ã«å²ãåœãŠãå²ãåœãŠãããããŒã¹ãžã®ãªã³ã¯ãæäŸããŸãã ã¢ã«ãŽãªãºã ã¯ãã®éšåã䜿çšããŸãã 幞çŠãšèª¿åã
ã¢ã«ãŽãªãºã ãã¡ã¢ãªèªäœãå²ãåœãŠããšã©ããªããŸããïŒ ããã»ã¹ãé »ç¹ã«äœæããã³åŒ·å¶çµäºããããã«å€ãã®ã¢ã«ãŽãªãºã ãããå Žåãã¡ã¢ãªã®ã©ã³ãã ãªå²ãåœãŠãšè§£æŸãéå§ãããã¡ã¢ãªã®æçåãå§ãŸããŸãã ããã«ããã空ãã¡ã¢ãªã®åèšéãå¿
èŠéãè¶
ããå Žåã§ããããæç¹ã§å¿
èŠãªéã®ã¡ã¢ãªãå²ãåœãŠãããšãã§ããªããªããšããäºå®ã«ã€ãªãããŸãã RAMã¯ãç¹ã«ã¢ãã€ã«ããã€ã¹ã§ã¯ãäŸç¶ãšããŠããªãé«äŸ¡ãªãªãœãŒã¹ã§ãã
åãååã«ãããä»ã®ã·ã¹ãã æ©èœãåºå¥ããããšãæãŸããã
åºæ¬æäœ
åºæ¬æäœãšã¯ãCã«ã¯ãªããé »ç¹ã«äœ¿çšããéç¹å®æäœã®å²ãåœãŠãæå³ããŸãã
åçŽãªCLZæäœïŒå
é ã®ãŒããã«ãŠã³ãïŒãæ€èšããŠãã ããã Cã«ã¯ãã®ãããªæäœã¯ãããŸãããå¿
èŠã«å¿ããŠããŒããã«ãŠã³ãããã¢ã«ãŽãªãºã ãäœæã§ããŸãã ããªãã¯ã¯ãäžéšã®ããã»ããµãç¹ã«ARMã§ãããŒããŠã§ã¢ã¬ãã«ã§å®è£
ãããããšã§ãã ãããã®å Žåãç§ãã¡ã¯æã£ãŠãããã®ãå·éã«äœ¿çšããŸãã ãã®ãããã³ã³ãã€ã©ã«ã¯çµã¿èŸŒã¿é¢æ°ãå«ãŸããŠããå ŽåããããŸãã ã³ã³ãã€ã©ããã®ãããªé¢æ°ãå®è£
ããŠããªãå ŽåïŒãã®äŸã®ããã«ãGCCã®å®è£
ïŒãã¢ã»ã³ãã©ãŒæäœãé
眮ã§ããŸãã ãã®æäœãå®è£
ãããŠããªãããã»ããµã®å Žåãå¥åã®ã³ãŒããèšè¿°ããå¿
èŠããããŸãã ãã ããããã¯åºæ¬çãªæäœã§ãã ããã¯ã©ãã§ããïŒ åºæ¬æäœã1åäœæããã³ãŒãã§åŒã³åºããŸãã移æ€ããå¿
èŠãããå Žåã¯ãåäœãã¹ããäœæãããã®æäœã移æ€ããåäœãã¹ãã§çµæã確èªããŸãã ãã¹ãŠãåé¡ãªããã°ã䜿çšããã³ãŒããåé¡ãããŸããã
äžæž¬ã®äºæ
åºæ¬çãªæäœã匷調ããå¿
èŠæ§ã瀺ãããã«ãäžèŠåçŽãªäŸãint64ã®ã·ããã瀺ããŸãã ååãšããŠããã®ã³ãã³ãã¯Cã§èšè¿°ãããŠããŸãããæšæºã®intã§ã¯ãªãint64ã§ãããããããŸããŸãªæ¹æ³ã§å®è£
ã§ããŸãã ç°ãªãã·ã¹ãã ã®Int64ã¯ç°ãªãæ¹æ³ã§åŒã³åºãããŸãããããã»ã©æªãã¯ãããŸããã æ倧ã®åé¡ã¯ãããŸããŸãªæ¹æ³ã§å®è¡ã§ããããšã§ãã
äŸïŒuint64 >> n
uint64_t LogicalShiftRigth(uint64_t number, int shift) { return number >> shift; } uint64_t test = 0x1234567812345678; uint64_t res63 = LogicalShiftRigth(test, 63); uint64_t res64 = LogicalShiftRigth(test, 64);
è«çå³ã·ãããšåŒã°ããåºæ¬æäœãæ€èšããŠãã ããã 63ãš64ã ãã·ããããå¿
èŠã®ããæ°å€ããããŸãããããã¯å¢çå€ã§ãã ãåç¥ã®ããã«ãæãåé¡ãåŒãèµ·ããã®ã¯å¢çå€ã§ãã res63ãšres64ã§äœãèµ·ãããŸããïŒ çè«çã«ã¯ããŒããããã¯ãã§ãã ããããå®éã«ã¯ããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã
ãã©ãããã©ãŒã ã®ããã深床ã«å¿ããŠãããŸããŸãªçµæãåŸãããŸããããã¹ãŠã培åºçã«ã«ãŒã«ã«åŸã£ãŠè¡ãããŸãã ãã®ãããåºæ¬çãªæŒç®åã§è«äºã®çãšãªã£ãŠããããšã匷調ããåå¥ã«ç§»æ€ããå Žåã¯ãããã®ãã¹ããè¡ãã»ããè¯ãã®ã§ãã
ããŒããŠã§ã¢äŸåéšå
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ããã€ã¹äŸåéšåã«ã¯ã次ã®æ©èœããããŸãã
- AndroidãiOSããã®ä»ã®APIãã¬ãŒã ã¯ãŒã¯ã«å€§ããäŸåããŠããŸãã
- å€ãã®å Žåã éãã€ãã£ãã®æ段ã䜿çšããŸãã ããšãã°ãAndroidã§ãããªã䜿çšããã³ãŒãã«ã¯æ¬¡ã®ã¢ã«ãŽãªãºã ããããŸãããšã³ãžã³ã¯Cã§èšè¿°ãããŠããŸããJNIãä»ããŠJavaãåŒã³åºãã次ã«JNIãä»ããŠçµæãè¿ããŸãã
- 移æ€æ§ã®äœãèšèªã䜿çšããŸã ã 移æ€æ§ã®äœãèšèªã®å Žåãããšãã°Objective-CãJavaãªã©ã®å±æ§ããããŸãã Javaã¯Cãšæ¯èŒããŠã¯ãã¹ãã©ãããã©ãŒã èšèªãšèŠãªãããŠãããšããäºå®ã«ãããããããæ®éæ§ã¯æããã«æ¬ ããŠããŸãã
åºæ¬çãªã©ãããŒ
ã³ãŒãã®ããã€ã¹äŸåéšåã§äœæ¥ãäœããã®åœ¢ã§çµ±äžããããã«ãåºæ¬çãªã©ãããŒã®ã»ãããéžæããããšããå§ãããŸãã ã©ãããŒã®ãªã¹ãã®ããŒãžã§ã³ãæäŸããŸãã
- ã·ã¹ãã ãã° éåžžã®printfïŒïŒã¯éçºã«å€§ãã«åœ¹ç«ã¡ãŸãã åãã©ãããã©ãŒã ã«ã¯ç¬èªã®ãã¬ãŒã ã¯ãŒã¯ããããŸãã ããšãã°ãiOSã®å Žåã¯NSLogãAndroidã®å Žåã¯Logcatã§ãã
- ã¡ã¢ãªãããŒãžã£ãŒ ã ãã§ã«ããã£ãããã«ãmalloc / freeãå®è¡ããç¬èªã®ã¡ã¢ãªãããŒãžã£ãçšæããããšããå§ãããŸãã ããã«ãã¡ã¢ãªãªãŒã¯ãæ¢ãããã«åœŒã«æããããšãã§ããŸãã
- ãã¥ãŒããã¯ã¹/ã¢ãããã¯æäœããã·ã¹ãã ããšã«å®è£
ãç°ãªããŸãã
- ã¹ã¬ãããããŒãžã£ãŒ -ãã¥ãŒããã¯ã¹çšã®ã¢ããªã³ãšããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ã¡ã€ã³APIã
- ã·ã¹ãã æ
å ±ã¯ãå®è¡æã«äœããå€æŽããå Žåã«åœ¹ç«ã¡ãŸãã ã³ãŒããè€æ°ã®ããã»ããµçšã«æé©åãããŠããå Žåãå®è¡æã®ã·ã¹ãã ã確èªããå¿
èŠãªéšåãæ¥ç¶ã§ããŸãã
- ãã¬ãŒã¹/ãã®ã³ã°ã¯ãåãªãã·ã¹ãã ãã°ã§ã¯ãªããªããŸããã ããã¯ãããã°ãšã©ãŒã§ããããã¹ãŠã®ãã©ãããã©ãŒã ã§åãã§ããã°çŽ æŽãããããšã§ãã
- ãã¡ã€ã«ã®æäœã«ã¯ããã¡ã€ã«ã®å
¥å/åºåã.pmãã³ããªã©ãå«ãŸããŸãã åäžã®ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠåºåããããšã¯éåžžã«äŸ¿å©ã§ãã
- ãããã¡ã€ãªã³ã°ããŒã« ã éãã³ãŒãã䜿çšããŠããå ŽåãæšæºããŒã«ã䜿çšãããšãäœãã©ãã§å€±ãããããããã«èŠã€ããããšãã§ãããšã¯éããŸããã ãã¡ãããç¹å®ã®ãã©ãããã©ãŒã ããšã«ãã€ãã£ãããŒã«ã䜿çšããããšããã¯ãã¹ãã©ãããã©ãŒã ã®ã¯ããã¯ããã°ãªã©ãèšè¿°ããŠã³ãŒãã§åŒã³åºãããšãã§ããŸãã
è¿œå ã®ã©ãããŒ
ããã€ã¹ã®åäœã«ãã£ãŠã¯ãè¿œå ã®ã©ãããŒãå¿
èŠã«ãªãå ŽåããããŸãã 以äžã¯ãã©ãããŒã®äœ¿çšãå¿
é ã«ããããŒããŠã§ã¢éšåã®çããªã¹ãã§ãïŒãããã¯ã移æ€ãã¹ã ãŒãºã«è¡ãããã«å¿
èŠã§ãïŒã
- ãœã±ãã/ãããã¯ãŒã¯
- ãªãŒãã£ãªæ©åš
- ãããªæ©åš
- å
¥åæ©åš
å°èš
äžèšã®ãã¹ãŠã®æšå¥šäºé
ã«åŸã£ãŠãæºåž¯ããåäžã®ã¿ã€ããä»ããŠèšè¿°ãããã¢ã«ãŽãªãºã ãååŸããŸãã ãã®ã¢ã«ãŽãªãºã ã¯ãä»å
¥ããŸã£ããå¿
èŠãšããŸããã çè«çã«ã¯ãããã«ã³ã³ãã€ã«ããŠç²åŸããå¿
èŠããããŸãã åäœãã¹ããè¡ãæ¹ãè¯ãã§ãããã ã¢ã«ãŽãªãºã ãã³ã³ãã€ã«ãããŠãã¹ãã«åæ Œããå Žåãã»ãšãã©ã®å Žåããã¹ãŠãåé¡ãããŸããã åºæ¬æäœã移æ€ãããŸããã移æ€ãããªãå ŽåããããŸãã
ããŒããŠã§ã¢ã«ã¯ãã§ã«ç§»æ€ãå¿
èŠã§ãã ãããŠãã§ããã ãã·ã¹ãã ã«è¿ãã€ã³ã¿ãŒãã§ãŒã¹ãæã£ãŠããæ¹ãè¯ãã§ãã ãããã¯ãã§ãã¯ãããããªããããéã移æ€ãããŸãã
泚æïŒ
æåŸã«ãããã€ãã®äžè¬çãªæšå¥šäºé
ã瀺ããããšæããŸãã移æ€å¯èœãªã³ãŒããæžããšããç§ã¯äœãæ¢ãã¹ãã§ããã
- ããŒã¿/ã³ãŒãã¡ã¢ãªã æºåž¯ç«¯æ«ã«ã¯ã¡ã¢ãªãããŸããªãããšãå¿ããªãã§ãã ããã 圌女ã¯åžžã«äžè¶³ããŠãããåžžã«ã©ããã§éããããšããŠãã人ã¯åœŒå¥³ã®èªç±ãªæ綱ãäžãã䟡å€ããããŸãã ãããã£ãŠãæçåãåé¿ããã«ã¯ãç¬èªã®ã¡ã¢ãªãããŒãžã£ã䜿çšããããšããå§ãããŸãã ããã«ãã³ãŒãã¯å°ããããšãæãŸããã§ããARMåºæã®æäœãéèŠã§ãªãå Žåã¯ãThumb2ã䜿çšããããšããå§ãããŸãã
- ããŒã¿ã®ã¢ã©ã€ã¡ã³ãã ARMv7ããåã¯ãARMã¢ãŒããã¯ãã£ã¯éå¢çæŽåããŒã¿ãžã®ã¢ã¯ã»ã¹ããµããŒãããŠããŸããã§ããã ãã ãããã®åäœãå¯èœã«ãªã£ãåŸã§ãããã®æäœã«ãããæäœãç°¡åãªè¿œå ã®ããã»ããµãçºçããŸãã ãããã£ãŠãã¡ã¢ãªãintã®å¢çã«æ²¿ã£ãŠé
眮ããããšããå§ãããŸããããã«ããã£ãã·ã¥ã®å¢çã«æ²¿ã£ãŠã¡ã¢ãªãé
眮ããããšããå§ãããŸããããã«ãããé«éããŒããæäŸãããŸãã
- ããã»ããµã®æé©åã éãã¢ã«ãŽãªãºã ãç¹ã«é³å£°ãšãããªãããå Žåãæé©åãªãã§ã¯äœãæ©èœããŸããã ãããŠãçªç¶é¢éžãããšãããããªãŒå
šäœãããã«äœ¿ãæãããŠããŸããŸãã
- æµ®åå°æ°ç¹ã ããã©ã«ãã§ã¯ãARMã«ã¯æµ®åå°æ°ç¹ã¯ãããŸããã NEONãããã¯ãCortexã«ç»å Žããæµ®åå°æ°ç¹æŒç®ãå®è£
ããŠããŸããããã¹ãŠã®ããã€ã¹ã§ã¯ãããŸããã iOSãå®è¡ããŠããã¹ããŒããã©ã³ã«ã€ããŠãåžžã«æµ®åå°æ°ç¹ãååšããããšãããã£ãŠããå ŽåãAndroidããã€ã¹ã®ã¡ãŒã«ãŒã¯ãããæåŠããŠä¿åããããšãã§ããŸãã ãããã£ãŠãAndroidã®å ŽåãGet CPU Featuresãç§ãã¡ã®å©ãã«ãªããŸããããã§ã¯ãæµ®åå°æ°ç¹ã®ãã§ãã¯ãè¡ãããŸãã
- æŽæ°é€ç®ã 圌ã«ãšã£ãŠãç©äºã¯æµ®åå°æ°ç¹ã®å Žåãšåãã§ãããã¹ãŠã®ã«ãŒãã«ãintãintã«åå²ã§ããããã§ã¯ãããŸãããããã¯èŠããŠãã䟡å€ããããŸãã
- ã¹ã¬ãããšMainThreadã ã¢ããªã±ãŒã·ã§ã³ããã«ãã¹ã¬ããã§ãªãå Žåã¯ããã«ãã¹ã¬ããã«ããŸãã ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§UIãããŠã³ããŒãããã®ã¯æãããããšã§ããã·ã³ã°ã«ã¹ã¬ããã®å®è£
ã§ã¯ããã¬ãŒãããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãŸã§ãããŸããŸãªå¹æãå¯èœã§ãã æ¢ã«ãã«ãã¹ã¬ããã·ã¹ãã ã䜿çšããŠããå Žåã¯ãMainThreadã«æ³šæããŠãã ãããå€ãã®åŠçã¯ã·ã¹ãã ããã®ã¿å®è¡ãããå¿
èŠãããããã§ãã
ç°¡åãªèŠçŽ
- ãŸããããã»ããµã¢ãŒããã¯ãã£ãç解ãããšã移æ€ã®å質ãåäžããŸãã
- 第äºã«ã移æ€ãæåãããéµã¯ãåªããã¯ãã¹ãã©ãããã©ãŒã ã³ãŒãã§ãã ã€ãŸããæ¢åã®ã³ãŒããæžãæããã®ã«è²»ããæéãå°ãªãã»ã©ãããè¯ããããéããããå®ããªããŸãã 誰ãããç¹ã«ãããŒãžã£ãŒã¯å¹žãã«ãªããŸãã
- 3çªç®ïŒã³ãŒãã®ç§»æ€æ§ã®ã·ã³ãã«ãã¯ãã¢ãŒããã¯ãã£ã®å¥å
šæ§ã«ãã£ãŠæ±ºãŸããŸãã ãããã£ãŠãæ°ããã¢ããªã±ãŒã·ã§ã³ãäœæããå Žåã¯ãæåã«ã¯ãã¹ãã©ãããã©ãŒã ãšèããŠãã ããã 転éããäºå®ããªãå Žåã§ããä»ã®èª°ãããããè¡ãå¿
èŠããããŸãã
ã¯ãã¹ãã©ãããã©ãŒã ã³ãŒãã®å®è£
ã®è¯ãäŸãã芧ã«ãªãããå Žåã¯ãlibjingleã«æ³šæããããšããå§ãããŸãã ãã®èšäºã§èª¬æããã»ãŒãã¹ãŠã®ä»®å®ãæºããããŠããŸãã
ã³ãŒãã®ç§»æ€ãããã«ç°¡åã«ããæ¹æ³ãç¥ã£ãŠããå ŽåããŸãã¯ç§ãè¿°ã¹ããã€ã³ãã®è©³çŽ°ã«ã€ããŠè°è«ãããå Žåã¯ãã³ã¡ã³ãã§ã話ãããŠããã ããŸãã