ð ãã®èšäºã¯ Zenn ã«æçš¿ããå 容ã®ã¢ãŒã«ã€ãã§ãã
ââ2026幎ã®ããŒããŠã§ã¢åæã§èããããŒã¿æ§é ã®çŸå®
ãšã³ãžãã¢åãã®èšäºã SNS ã§ã
ããªã³ã¯ãªã¹ãã¯ããçµãã£ãã
ãšãã衚çŸãèŠãããããšããããŸãã
æåã«ãã®è©±ãèãããšããæ£çŽããªã極端ã ãªãšæããŸããã
ãã ãå®åã§ããã©ãŒãã³ã¹ãæèããèšèšãå®è£
ãéããŠãããšããã®èšãæ¹ãå®å
šã«ééã£ãŠãããšãèšãåããªã ããšããæèŠã«ãªã£ãŠããŸãã
ãã®èšäºã§ã¯ãããªã³ã¯ãªã¹ãããªãé¿ããããããã«ãªã£ãã®ãããããã§ãä»ãªã䜿ããç¶ããŠããçç±ãããçŸä»£ã® CPUã»ã¡ã¢ãªæ§æãåæã« æŽçããŠã¿ãŸãã
æç§æžçãªçè§£ãšãçŸå®ã®ãºã¬
åŠçæä»£ã«ããŒã¿æ§é ãåŠãã ãšããã»ãšãã©ã®äººã次ã®ããã«ç¿ã£ãã¯ãã§ãã
é åïŒéäžãžã®æ¿å ¥ã»åé€ã¯ O(N)
ãªã³ã¯ãªã¹ãïŒæ¿å ¥ã»åé€ã¯ O(1)
çè«ãšããŠã¯æ£ããã§ãã
ãã ããããã«ã¯éèŠãªåææ¡ä»¶ ããããŸãã
ã¡ã¢ãªã¢ã¯ã»ã¹ã®ã³ã¹ãã¯ãã¹ãŠåãã§ãã
çŸå®ã®ããŒããŠã§ã¢ã§ã¯ãããã¯æç«ããŸããã
ãã£ãã·ã¥éå±€ãšãããç¡èŠã§ããªãçŸå®ã
çŸä»£ã® CPU ã§ã¯ãã¡ã¢ãªã¯éå±€æ§é ã«ãªã£ãŠããŸãã
L1 ãã£ãã·ã¥ïŒæ°ãµã€ã¯ã«
L2 ãã£ãã·ã¥ïŒåæ°ãµã€ã¯ã«
L3 ãã£ãã·ã¥ïŒæ°åãµã€ã¯ã«
ã¡ã€ã³ã¡ã¢ãªïŒRAMïŒïŒæ°çŸãµã€ã¯ã«
ãã®å·®ã¯ç¡èŠã§ãããã®ã§ã¯ãããŸããã
ç¹ã«åé¡ã«ãªãã®ããã¢ã¯ã»ã¹ãã¿ãŒã³ãäºæž¬ã§ããªãå Žå ã§ãã
ãªã³ã¯ãªã¹ããäžå©ã«ãªãçç±
å žåçãªãªã³ã¯ãªã¹ãã¯ãããŒããã¡ã¢ãªäžã«æ£ãã°ã£ãŠé 眮ãããŸãã
Node A -> Node B -> Node C
èŠãç®ã¯ã·ã³ãã«ã§ãããå®éã®ã¢ãã¬ã¹ã¯æ¬¡ã®ããã«ãªã£ãŠãããããããŸããã
0x1000 -> 0x8F20 -> 0x3A10
ãªã³ã¯ãªã¹ããèµ°æ»ããå Žåã
çŸåšã®ããŒããèªã¿èŸŒã
next ãã€ã³ã¿ãèªã
次ã®ã¢ãã¬ã¹ãåãã£ãŠãããæ¬¡ã®èªã¿èŸŒã¿ãè¡ã
ãšãã匷ãäŸåé¢ä¿ã®ããåŠç ã«ãªããŸãã
CPU ã®ããªãã§ããæ©æ§ã¯ãé£ç¶ããã¢ã¯ã»ã¹ïŒé
åãªã©ïŒã¯åŸæã§ããã
ãªã³ã¯ãªã¹ãã®ãããªãã€ã³ã¿è¿œè·¡ã¯ã»ãšãã©å
èªã¿ã§ããŸããã
çµæãšããŠããã£ãã·ã¥ãã¹ãé »çº ããŸãã
é åïŒvectorïŒãéãæ¬åœã®çç±
std::vector ãé
åãé çªã«åŠçããŠãããšãã
å®éã«ã¯ CPU ã¯ãã§ã«æ¬¡ã®ããŒã¿ããã£ãã·ã¥ã«èªã¿èŸŒãã§ããŸãã
ã€ãŸãç§ãã¡ã¯ã
ã¡ã¢ãªãèªãã§ããã€ããã§ã
å®éã«ã¯ãã£ãã·ã¥ãèªãã§ããæéãã»ãšãã©
ãšããç¶æ ã«ãªããŸãã
ãã®å·®ã¯ãããŒã¿éãæ°åïœæ°äžçšåºŠã§ãã¯ã£ããçŸããŸãã
ãO(1) ã®æ¿å ¥ãã¯å®åã§ã¯çœ ã«ãªã
ãªã³ã¯ãªã¹ãã® O(1) æ¿å ¥ã¯ããã§ã«æ¿å ¥äœçœ®ã®ããŒããæã£ãŠãã ããšãåæã§ãã
çŸå®ã®ã³ãŒãã§ã¯ã
æ¿å ¥äœçœ®ãæ¢ãããã«èµ°æ»ãå¿ èŠ
ããŒãçæã®ããã«ã¡ã¢ãªç¢ºä¿ãçºç
ã¢ãã±ãŒã¿ã®ãªãŒããŒããã
ãã£ãã·ã¥ã®ã³ãŒã«ãã¹ã¿ãŒã
ãšãã£ãã³ã¹ããéãªããŸãã
å®éãèŠçŽ æ°ãããã»ã©å€ããªãå Žåã¯ãvector ã® memmove ã®ã»ããéãã±ãŒã¹ã¯çãããããŸããã
ããã§ããªã³ã¯ãªã¹ãã¯ãæ¶ããŠããªãã
ã§ã¯ããªã³ã¯ãªã¹ãã¯å®å šã«äžèŠã«ãªã£ãã®ã§ããããã
çã㯠No ã§ãã
ãã ãã䜿ãããã¬ã€ã€ãŒãå€ãããŸããã
äŸµå ¥åãªã¹ãïŒIntrusive ListïŒ
Linux ã«ãŒãã«ãªã©ã§å€çšãããŠããã®ããäŸµå ¥åãªã¹ãã§ãã
ããã¯ã
ããŒããå¥é確ä¿ããªã
æ§é äœã®äžã« next / prev ãçŽæ¥æããã
ãšããèšèšã§ãã
ãã®æ¹åŒã§ã¯ã
远å ã»åé€ã§ã¡ã¢ãªç¢ºä¿ãçºçããªã
ãªããžã§ã¯ããè€æ°ã®ãªã¹ãã«åæã«å±ãã
ãšãã£ãå©ç¹ããããŸãã
ã«ãŒãã«ãäœã¬ã€ã€ãŒã§ã¯ãä»ã§ãäžå¯æ¬ ãªæ§é ã§ãã
䞊è¡åŠçã»ããã¯ããªãŒæ§é
ãã«ãã¹ã¬ããç°å¢ã§ã¯ãé åã¯æ±ãã¥ãããªããŸãã
éäžãžã®æ¿å ¥ã»åé€ã§ã¯ã
åºç¯å²ã®èŠçŽ ç§»åãå¿ èŠ
倧ããªããã¯ãå¿ èŠ
äžæ¹ããªã³ã¯ãªã¹ãã¯å±æçãªæŽæ°ãå¯èœã§ãã
CASïŒCompare-And-SwapïŒåœä»€ã䜿ãã°ã
ããã¯ããªãŒãã¥ãŒãã¹ã¿ãã¯ãå®è£
ã§ããŸãã
Michael-Scott Queue ãªã©ãå®çžŸã®ããã¢ã«ãŽãªãºã ã®å€ãã¯
ãªã³ã¯æ§é ãããŒã¹ã«ããŠããŸãã
ã¡ã¢ãªã¢ãã±ãŒã¿ã®å éšã§ã䜿ãããŠãã
malloc ã®å®è£
ïŒglibc / jemalloc / tcmallocïŒã§ã¯ã
空ãã¡ã¢ãªç®¡çã«ãªã³ã¯ãªã¹ãã䜿ãããŠããŸãã
空ããŠããã¡ã¢ãªèªèº«ã«ãã€ã³ã¿ãæãããããšã§ã
远å ã®ç®¡çé åãäžèŠã«ããŠããã®ã§ãã
ãã®çšéã§ã¯ããªã³ã¯ãªã¹ãã¯éåžžã«çã«ããªã£ãŠããŸãã
ããŒã¿æåèšèšãšãªã³ã¯ãªã¹ã
è¿å¹Žãã²ãŒã éçºãäžå¿ã«
Data-Oriented DesignïŒDODïŒ ãåºã䜿ãããŠããŸãã
Unity ã® ECS ãªã©ãå žåäŸã§ããã
ããŒã¿ããªããžã§ã¯ãåäœã§ãŸãšããªã
åçš®ã®ããŒã¿ãé£ç¶ããé åã§æã€
ãšããèšèšã§ãã
ãã®ææ³ã§ã¯ããªã³ã¯ãªã¹ãã¯æç¢ºã«äžå©ã§ãã
ãã£ãã·ã¥å¹çãæåªå
ããããã§ãã
é åã§ãªã³ã¯ã衚çŸãããšãã劥åç¹
æè¿ãã䜿ãããææ³ãšããŠã
ãã€ã³ã¿ã§ã¯ãªãã€ã³ããã¯ã¹ã䜿ã
倧ããªé åããªããžã§ã¯ãããŒã«ãšããŠäœ¿ã
ãšããèšèšããããŸãã
ããã¯ã
ç©ççã«ã¯é åïŒé£ç¶ã¡ã¢ãªïŒ
è«ççã«ã¯ãªã³ã¯æ§é
ãšããæè¡·æ¡ã§ãã
Rust ã Zig ã®æåãšãçžæ§ãè¯ãã
髿§èœãªã·ã¹ãã ã§ããèŠããã圢ã§ãã
çµè«ïŒãªã³ã¯ãªã¹ãã¯ã圹å²ãå€ãã£ãã
ã¢ããªã±ãŒã·ã§ã³å±€ã®æ±çšã³ã³ãããšããŠã®ãªã³ã¯ãªã¹ã
â ã»ãŒäœ¿ãããªããªã£ãã·ã¹ãã ã»äœã¬ã€ã€ãŒã»äžŠè¡åŠçã»ã¡ã¢ãªç®¡ç
â ä»ãçŸåœ¹
ããªã³ã¯ãªã¹ãã¯ãã䜿ããªãããšããèšèã¯ã
ç¡æ¡ä»¶ã«åŠå®ãã¹ããã®ã§ã¯ãããŸãã ã
ããã¯ã
æœè±¡ã ããä¿¡ããŠãããŒããŠã§ã¢ãç¡èŠãããª
ãšããèŠåãšããŠåãåãã®ããã¡ããã©è¯ããšæããŸãã
ããããã³ãŒããæžããšãã
å°ãã ããã£ãã·ã¥ã©ã€ã³ãã¡ã¢ãªã¢ã¯ã»ã¹ãæèãããšã
ããŒã¿æ§é ã®éžã³æ¹ãå€ãã£ãŠããã¯ãã§ãã