11.1 幎éã®éçºãçµãŠãæ°ãã GCC 11.x ãã©ã³ãã®æåã®éèŠãªãªãªãŒã¹ã§ãããç¡æã®ã³ã³ãã€ã© ã¹ã€ãŒã GCC 11.0 ããªãªãŒã¹ãããŸããã æ°ãããªãªãŒã¹çªå·ä»ãã¹ããŒã ã«åŸã£ãŠãããŒãžã§ã³ 11.1 ãéçºããã»ã¹ã§äœ¿çšãããGCC 12.0 ã®ãªãªãŒã¹ã®çŽåã«ãGCC 12.1 ãã©ã³ãããã§ã«åå²ããŠããããããã次ã®ã¡ãžã£ãŒ ãªãªãŒã¹ã§ãã GCC XNUMX ã圢æãããŸãã
GCC 11.1 ã¯ãããã©ã«ã㧠DWARF 5 ãããã° ãã¡ã€ã«åœ¢åŒã®äœ¿çšãžã®ç§»è¡ãC++17 æšæº (ã-std=gnu++17ã) ã®ããã©ã«ãã®çµã¿èŸŒã¿ãC++20 ã®ãµããŒãã®å€§å¹ ãªæ¹åã§æ³šç®ã«å€ããŸããæšæºãC++23 ã®å®éšçãµããŒããå°æ¥ã® C èšèªæšæº (C2x) ã«é¢é£ããæ¹åãæ°ããããã©ãŒãã³ã¹ã®æé©åã
äž»ãªå€æŽç¹ïŒ
- C++ èšèªã®ããã©ã«ã ã¢ãŒãã¯ã以åã«æäŸãããŠãã C++17 ã§ã¯ãªã C++17 æšæº (-std=gnu++14) ã䜿çšããããã«åãæ¿ããããŸãããä»ã®ãã³ãã¬ãŒãããã©ã¡ãŒã¿ãšããŠäœ¿çšãããã³ãã¬ãŒããåŠçãããšãã«ãæ°ãã C++17 ã®åäœãéžæçã«ç¡å¹ã«ããããšãã§ããŸã (-fno-new-ttp-matching)ã
- AddressSanitizer ããŒã«ã®ããŒããŠã§ã¢ ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ãµããŒããè¿œå ãããŸãããããã«ãããã¡ã¢ãªãæäœããéã«ã解æŸãããã¡ã¢ãªé åãžã®ã¢ã¯ã»ã¹ãå²ãåœãŠããããããã¡ã®å¢çãè¶ ããã¢ã¯ã»ã¹ãããã³ãã®ä»ã®çš®é¡ã®ãšã©ãŒã®äºå®ãå€æã§ããããã«ãªããŸããããŒããŠã§ã¢ ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯çŸåšãAArch64 ã¢ãŒããã¯ãã£ã§ã®ã¿å©çšå¯èœã§ãããLinux ã«ãŒãã«ã®ã³ã³ãã€ã«æã®äœ¿çšã«éç¹ã眮ããŠããŸãããŠãŒã¶ãŒç©ºéã³ã³ããŒãã³ããæ§ç¯ãããšãã« AddressSanitizer ããŒããŠã§ã¢ ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã«ããããã«ããã©ã°ã-fsanitize=hwaddressããšã«ãŒãã« ãã©ã°ã-fsanitize=kernel-hwaddressããè¿œå ãããŸããã
- ãããã°æ å ±ãçæããå Žåãããã©ã«ã㧠DWARF 5 圢åŒã䜿çšãããŸããããã«ããã以åã®ããŒãžã§ã³ãšæ¯èŒã㊠25% ã³ã³ãã¯ããªãããã° ããŒã¿ãçæã§ããŸãã DWARF 5 ãå®å šã«ãµããŒãããã«ã¯ãå°ãªããšã binutils ããŒãžã§ã³ 2.35.2 ãå¿ èŠã§ãã DWARF 5 圢åŒã¯ãGDB 8.0ãvalgrind 3.17.0ãelfutils 0.172ãããã³ dwz 0.14 以éã®ãããã° ããŒã«ã§ãµããŒããããŠããŸããä»ã®ããŒãžã§ã³ã® DWARF ã䜿çšããŠãããã° ãã¡ã€ã«ãçæããã«ã¯ããªãã·ã§ã³ã-gdwarf-2ããã-gdwarf-3ããããã³ã-gdwarf-4ãã䜿çšã§ããŸãã
- GCC ã®æ§ç¯ã«äœ¿çšã§ããã³ã³ãã€ã©ã®èŠä»¶ãå¢å ããŸãããã³ã³ãã€ã©ã¯ãC++11 æšæºããµããŒãããå¿ èŠããããŸã (以å㯠C++98 ãå¿ èŠã§ãã)ã GCC 10 ããã«ãããã«ã¯ GCC 3.4 ã§ååã ã£ãå ŽåãGCC 11 ããã«ãããã«ã¯å°ãªããšã GCC 4.8 ãå¿ èŠã«ãªããŸãã
- ãã³ããäžæãã¡ã€ã«ãLTO æé©åã«å¿ èŠãªè¿œå æ å ±ãä¿åãããã¡ã€ã«ã®ååãšå Žæãå€æŽãããŸããããã®ãããªãã¡ã€ã«ã¯ãã-dumpbaseããã-dumpdirããããã³ã-save-temps=*ããªãã·ã§ã³ã«ãã£ãŠãã¹ãæ瀺çã«å€æŽãããªãéããåžžã«çŸåšã®ãã£ã¬ã¯ããªã«ä¿åãããããã«ãªããŸããã
- HSAIL (Heterogeneous System Architecture Intermediate Language) èšèªã§äœ¿çšãããã€ããªåœ¢åŒ BRIG ã®ãµããŒãã¯éââæšå¥šãšãªãããŸããªãåé€ãããäºå®ã§ãã
- ThreadSanitizer ã¢ãŒã (-fsanitize=thread) ã®æ©èœãæ¡åŒµããããã«ãã¹ã¬ãã ã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãã¹ã¬ããããåãããŒã¿ãå ±æãããšãã«ç«¶åç¶æ ãæ€åºããããã«èšèšãããŠããŸããæ°ãããªãªãŒã¹ã§ã¯ã代æ¿ã©ã³ã¿ã€ã ãšç°å¢ã®ãµããŒãã«å ããLinux ã«ãŒãã«å ã®ç«¶åç¶æ ãåçã«æ€åºããããã«èšèšããã KCSAN (Kernel Concurrency Sanitizer) ãããã° ããŒã«ã®ãµããŒããè¿œå ãããŠããŸããæ°ãããªãã·ã§ã³ã-param tsan-distinguish-volatileãããã³ã-param tsan-instrument-func-entry-exitããè¿œå ããŸããã
- 蚺æã¡ãã»ãŒãžã®åçªå·ã¯ãè¡ã®å é ããã®ãã€ãæ°ã§ã¯ãªããå®éã«ã¯ãã«ããã€ãæåãšè¡å ã®è€æ°ã®äœçœ®ãå ããæåãèæ ®ããåçªå·ãåæ ããããã«ãªããŸãã (ããšãã°ãæå ð 㯠4 ã€ã®äœçœ®ãå ãã 8ãã€ãã§ãšã³ã³ãŒããããŸãïŒãåæ§ã«ãã¿ãæåã¯ç¹å®ã®æ°ã®ã¹ããŒã¹ãšããŠæ±ãããããã«ãªããŸãã (-ftabstop ãªãã·ã§ã³ã§æ§æå¯èœãããã©ã«ã㯠0)ã以åã®åäœã埩å ããã«ã¯ãã-fdiagnostics-column-unit=byteããªãã·ã§ã³ãææ¡ãããåæå€ (1 ãŸã㯠XNUMX ããã®çªå·ä»ã) ã決å®ããã«ã¯ãã-fdiagnostics-column-origin=ããªãã·ã§ã³ãææ¡ãããŸãã
- ãã¯ã¿ã©ã€ã¶ãŒã¯é¢æ°ã®å å®¹å šäœãèæ ®ããå¶åŸ¡ãã㌠ã°ã©ã (CFGãå¶åŸ¡ãã㌠ã°ã©ã) å ã®ä»¥åã®ãããã¯ãžã®äº€å·®ããã³åç §ã«é¢é£ããåŠçæ©èœãè¿œå ããŸãã
- ãªããã£ãã€ã¶ãŒã¯ãåãå€æ°ãæ¯èŒããäžé£ã®æ¡ä»¶æŒç®ã switch åŒã«å€æããæ©èœãå®è£ ããŸãã switch åŒã¯ãåŸã§ããã ãã¹ãåœä»€ã䜿çšããŠãšã³ã³ãŒãã§ããŸã (ãã®ãããªå€æãå¶åŸ¡ããããã«ã-fbit-testsããªãã·ã§ã³ãè¿œå ãããŸãã)ã
- ããã·ãŒãžã£éã®æé©åãæ¹åãããŸãããé¢æ°åŒã³åºãæã®å¯äœçšã远跡ããåæã®ç²ŸåºŠãåäžãããããã«ãæ°ãã IPA-modref ãã¹ (-fipa-modref) ãè¿œå ãããŸããã IPA-ICF ãã¹ (-fipa-icf) ã®å®è£ ãæ¹åãããŸãããããã«ãããã³ã³ãã€ã«äžã®ã¡ã¢ãªæ¶è²»ãåæžãããåäžã®ã³ãŒã ãããã¯ãçµåãããçµ±åé¢æ°ã®æ°ãå¢å ããŸãã IPA-CP (æç¶ãéå®æ°äŒæ) ãã¹ã§ã¯ãæ¢ç¥ã®å¢çãšã«ãŒãã®ç¹åŸŽãèæ ®ããŠãäºæž¬ãã¥ãŒãªã¹ãã£ãã¯ãæ¹åãããŸããã
- Linking Time Optimizations (LTO) ã§ã¯ããµã€ãºãåæžããåŠçé床ãåäžãããããã«ãã€ãã³ãŒã圢åŒãæé©åãããŸãããã€ã³ãã£ã³ã°ãã§ãŒãºäžã®ããŒã¯ã¡ã¢ãªæ¶è²»éãåæžããŸããã
- ã³ãŒããããã¡ã€ãªã³ã°ã®çµæã«åºã¥ãæé©åã¡ã«ããºã (PGO - ãããã¡ã€ã«ã¬ã€ãä»ãæé©å) ã§ã¯ãå®è¡æ©èœã®åæã«åºã¥ããŠããæé©ãªã³ãŒããçæã§ããŸãããŒãã«ãŠã³ã¿ãŒã®ããã³ã³ãã¯ããªããã±ãŒãžåã«ãããGCOV ããŒã¿ãå«ããã¡ã€ã«ã®ãµã€ãºãåæžãããŸãã ãéæ¥åŒã³åºãã§ããå€ãã®ãã©ã¡ãŒã¿ã远跡ããããšã«ãããã-fprofile-valuesãã¢ãŒããæ¹åãããŸããã
- OpenMP 5.0 (Open Multi-Processing) æšæºã®å®è£ ã§ã¯ãå ±æã¡ã¢ãªãšãã¯ãã«åãŠããã (SIMD) ãåãããã«ãã³ã¢ããã³ãã€ããªãã (CPU+GPU/DSP) ã·ã¹ãã ã«äžŠåããã°ã©ãã³ã°ææ³ãé©çšããããã® API ãšææ³ãå®çŸ©ããŠããŸããç¶ããã assign ãã£ã¬ã¯ãã£ãã®åæãµããŒããšãOpenMP æ§é ã§ç°çš®ã«ãŒãã䜿çšããæ©èœãè¿œå ãããŸããã OMP_TARGET_OFFLOAD ç°å¢å€æ°ã®ãµããŒããå®è£ ãããŸããã
- CãC++ãããã³ Fortran èšèªçšã«æäŸãããŠãã OpenACC 2.6 䞊åããã°ã©ãã³ã°ä»æ§ã®å®è£ ãæ¹åãããGPU ã NVIDIA PTX ãªã©ã®ç¹æ®ãªããã»ããµã§æäœããªãããŒãããããã®ããŒã«ãå®çŸ©ãããŠããŸãã
- C èšèªã®å Žåãã¹ã¿ãã¯ä¿è·ãæå¹ã«ããŠã¯ãããªãé¢æ° (ã-fstack-protectorã) ãããŒã¯ããããã«èšèšãããæ°ããå±æ§ãno_stack_protectorããå®è£ ãããŸããã ãmallocãå±æ§ã¯ãã¡ã¢ãªã®å²ãåœãŠãšè§£æŸã®ããã®åŒã³åºãã®ã㢠(ã¢ãã±ãŒã¿/ãã¢ãã±ãŒã¿) ã®èå¥ããµããŒãããããã«æ¡åŒµãããŸãããããã¯ãéçã¢ãã©ã€ã¶ã§ã¡ã¢ãªæäœæã®å žåçãªãšã©ãŒ (ã¡ã¢ãª ãªãŒã¯ã解æŸåŸã®äœ¿çšã free é¢æ°ãžã®äºéåŒã³åºããªã©)ãã³ã³ãã€ã©èŠåã-Wmismatched-deallocããã-Wmismatched-new-deleteããããã³ã-Wfree-nonheap-objectãã§ãã¡ã¢ãªå²ãåœãŠè§£é€ãšã¡ã¢ãªå²ãåœãŠæäœã®éã®äžäžèŽã«ã€ããŠéç¥ããŸãã
- C èšèªã«é¢ããæ°ããèŠåãè¿œå ãããŸããã
- ã-Wmismatched-deallocã (ããã©ã«ãã§æå¹) - ã¡ã¢ãªå²ãåœãŠé¢æ°ãšäºææ§ã®ãªããã€ã³ã¿ãŒã䜿çšããã¡ã¢ãªå²ãåœãŠè§£é€æäœã«ã€ããŠèŠåããŸãã
- ã-Wsizeof-array-divã (ã-Wallããæå®ãããŠããå Žåã«æå¹) - é€æ°ãé åèŠçŽ ã®ãµã€ãºãšäžèŽããªãå Žåã2 ã€ã® sizeof æŒç®åãé€ç®ããããšã«ã€ããŠèŠåããŸãã
- ã-Wstringop-overreadã (ããã©ã«ãã§æå¹) - é åå¢çã®å€åŽã®é åããããŒã¿ãèªã¿åãæååé¢æ°ã®åŒã³åºãã«ã€ããŠèŠåããŸãã
- ã-Wtsanã (ããã©ã«ãã§æå¹) - ThreadSanitizer ã§ãµããŒããããŠããªãæ©èœ (std::atomic_thread_fence ãªã©) ã®äœ¿çšã«ã€ããŠèŠåããŸãã
- ã-Warray-parameterãããã³ã-Wvla-parameterãïŒã-Wallããæå®ããå Žåã«æå¹ïŒ - åºå®é·é åããã³å¯å€é·é åã«é¢é£ä»ããããåŒæ°ã®äºææ§ã®ãªã宣èšã§é¢æ°ããªãŒããŒã©ã€ãããããšã«ã€ããŠèŠåããŸãã
- ã-WuninitializedãèŠåã¯ãåæåãããŠããªãåçã«å²ãåœãŠãããã¡ã¢ãªããã®èªã¿åãã®è©Šã¿ãæ€åºããããã«ãªããŸããã
- ã-Wfree-nonheap-objectãèŠåã¯ãåçã¡ã¢ãªå²ãåœãŠé¢æ°ãéããŠååŸãããªããã€ã³ã¿ã䜿çšããŠã¡ã¢ãªå²ãåœãŠè§£é€é¢æ°ãåŒã³åºãããå Žåã®å®çŸ©ãæ¡åŒµããŸãã
- ã-Wmaybe-uninitializedãèŠåã«ãããåæåãããŠããªãã¡ã¢ãªäœçœ®ãåç §ããé¢æ°ãžã®ãã€ã³ã¿ã®åãæž¡ãã®æ€åºãæ¡åŒµãããŸããã
- C èšèªã®å ŽåãC2X æšæºã®ãã¬ãŒã ã¯ãŒã¯å ã§éçºãããæ°æ©èœã®äžéšãå®è£ ãããŸãã (-std=c2x ããã³ -std=gnu2x ãæå®ããããšã§æå¹ã«ãªããŸã): ãã¯ã BOOL_MAX ããã³ BOOL_WIDTHãé¢æ°å ã®æªäœ¿çšãã©ã¡ãŒã¿ãŒã®ååã®ãªãã·ã§ã³ã®è¡šç€ºå®çŸ© (C++ ãšåæ§)ãå±æ§ã[ [nodiscard]]ããããªããã»ããµæŒç®åã__has_c_attributeãããã¯ã FLT_IS_IEC_60559ãDBL_IS_IEC_60559ãLDBL_IS_IEC_60559ã__STDC_WANT_IEC_60559_EXT__ãINFINITYãNANãFLT_SNANãDBL_SNAN ãLDBL_SNANãDEC_INFINITYãDEC _NANãNaN=ãã¯ãFloatNã_FloatNxãããã³ _DecimalNã宣èšã®åããã³è€åã¹ããŒãã¡ã³ãã®æåŸã«ãžã£ã³ã ããŒã¯ãæå®ããæ©èœã
- C++ ã®å ŽåãC++20 æšæºã§ææ¡ãããŠããå€æŽãšé©æ°ã®äžéšãå®è£ ãããŠããŸããããã«ã¯ãä»®æ³é¢æ°ãconsteval virtualãããªããžã§ã¯ãã®ã©ã€ã ãµã€ã¯ã«ã®çµããã®ããã®ç䌌ãã¹ãã©ã¯ã¿ãŒãenum ã¯ã©ã¹ã®äœ¿çšãããã³ãæ°ãããåŒã®é åã®ãµã€ãºãèšç®ããŸãã
- C++ ã®å Žåãå°æ¥ã® C++23 æšæº (-std=c++23ã-std=gnu++23ã-std=c++2bã-std=gnu) åãã«éçºãããŠããããã€ãã®æ¹åã®ããã®å®éšçãªãµããŒããè¿œå ãããŸããã ++2b)ãããšãã°ã笊å·ä»ã size_t å€ã«å¯Ÿãããªãã©ã«æ¥å°ŸèŸãzuãããµããŒããããããã«ãªããŸããã
- libstdc++ ã§ã¯ãæµ®åå°æ°ç¹åã® std::from_chars ããã³ std::to_chars å®è£ ã®å°å ¥ãªã©ãC++17 æšæºã®ãµããŒãã匷åãããŸããã std::bit_castãstd::source_locationãã¢ãããã¯æäœã®åŸ æ©ãšéç¥ãããããããã³å°æ¥ã® C++ æšæº 20 (std::to_underlyingãstd::is_scoped_enum)ã䞊åããŒã¿åŠçã®å (SIMDãããŒã¿äžŠåå) ã®å®éšçãµããŒããè¿œå ãããŸããã std::uniform_int_distribution ã®å®è£ ãé«éåãããŸããã
- ã³ãŒã ãžã§ãã¬ãŒã¿ãŒãä»ã®ããã»ã¹ã«åã蟌ã¿ãããã䜿çšããŠãã€ãã³ãŒãã® JIT ã³ã³ãã€ã«ããã·ã³ ã³ãŒãã«ç·šæããããã®å ±æã©ã€ãã©ãªã§ãã libgccjit ããã¢ã«ãã¡å質ãã©ã°ãåé€ããŸããã MinGW çšã® libgccjit ããã«ãããæ©èœãè¿œå ãããŸããã
- AArch64 Armv8-R ã¢ãŒããã¯ã㣠(-march=armv8-r) ã®ãµããŒããè¿œå ãããŸããã AArch64 ããã³ ARM ã¢ãŒããã¯ãã£ã®å Žåãããã»ããµã®ãµããŒããè¿œå ãããŸãã (ãã©ã¡ãŒã¿ -mcpu ããã³ -mtune): Arm Cortex-A78 (cortex-a78)ãArm Cortex-A78AE (cortex-a78ae)ãArm Cortex-A78C (cortex-a78c) ãArm Cortex- X1 (cortex-x1)ãArm Neoverse V1 (neoverse-v1)ãããã³ Arm Neoverse N2 (neoverse-n2)ã Fujitsu A64FX (a64fx) ããã³ Arm Cortex-R82 (cortex-r82) CPU ãè¿œå ãããAArch64 ã¢ãŒããã¯ãã£ã®ã¿ããµããŒãããŸãã
- Armv8.3-a (AArch64/AArch32)ãSVE (AArch64)ãSVE2 (AArch64)ãããã³ MVE (AArch32 M ãããã¡ã€ã«) SIMD åœä»€ã䜿çšããŠãå ç®ãæžç®ãä¹ç®ãããã³å ç®/æžç®ã®ããªã¢ã³ããå®è¡ããæŒç®ãèªåãã¯ãã«åããããã®ãµããŒããè¿œå ãããŸãããè€çŽ æ°ã MVE åœä»€ã»ããã䜿çšãã ARM ã®èªåãã¯ãã«åã®åæãµããŒããè¿œå ãããŸããã
- ARM ãã©ãããã©ãŒã ã®å Žåãã³ã³ãã€ã©ã«çµ±åããã C é¢æ° (Intrinsics) ã®å®å šãªã»ãããæäŸãããæ¡åŒµãã¯ãã«åœä»€ (SIMD) ã«çœ®ãæããããACLE Q3 2020 ä»æ§ã«ææžåãããŠãããã¹ãŠã® NEON åœä»€ãã«ããŒãããŸãã
- gfx908 GPU ã®ãµããŒãããGCN ãã€ã¯ãã¢ãŒããã¯ãã£ã«åºã¥ã㊠AMD GPU çšã®ã³ãŒããçæããããã¯ãšã³ãã«è¿œå ãããŸããã
- æ°ããããã»ããµãšããã«å®è£
ãããæ°ããåœä»€ã»ããæ¡åŒµã®ãµããŒããè¿œå ãããŸããã
- Intel Sapphire Rapids (-march=sapphirerapidsãMOVDIRIãMOVDIR64BãAVX512VP2INTERSECTãENQCMDãCLDEMOTEãSERIALIZEãPTWRITEãWAITPKGãTSXLDTRKãAMT-TILEãAMX-INT8ãAMX-BF16ãããã³ AVX-VNNI åœä»€ã®ãµããŒããæå¹ã«ããŸãã
- Intel Alderlake (-march=alderlakeãCLDEMOTEãPTWRITEãWAITPKGãSERIALIZEãKEYLOCKERãAVX-VNNIãããã³ HRESET åœä»€ã®ãµããŒããæå¹ã«ããŸã)ã
- Intel Rocketlake (-march=rocketlakeãSGX ãµããŒããªãã® Rocket Lake ã«äŒŒãŠããŸã)ã
- AMD Zen 3 (-march=znver3)ã
- Intel ããã»ããµãããŒã¹ãšãã IA-32/x86-64 ã·ã¹ãã ã®å Žåãæ°ããããã»ããµåœä»€ TSXLDTRKãSERIALIZEãHRESETãUINTRKEYLOCKERãAMX-TILEãAMX-INT8ãAMX-BF16ãAVX-VNNI ã®ãµããŒããè¿œå ãããŸããã
- x86-64 ã¢ãŒããã¯ã㣠ã¬ãã«ãéžæããããã®ã-march=x234-86-v[64]ããã©ã°ã®ãµããŒããè¿œå ããŸãã (v2 - SSE4.2ãSSSE3ãPOPCNTãããã³ CMPXCHG16B æ¡åŒµæ©èœãã«ããŒããŸããv3 - AVX2 ããã³ MOVBEãv4 - AVX-512 ïŒã
- ããã°ãšã³ãã£ã¢ã³ã®ãã€ããªãŒããŒã䜿çšãã RISC-V ã·ã¹ãã ã®ãµããŒããè¿œå ãããŸããã RISC-V åœä»€ã»ãã ã¢ãŒããã¯ãã£ä»æ§ã®ããŒãžã§ã³ãéžæããããã®ã-misa-spec=*ããªãã·ã§ã³ãè¿œå ããŸããã AddressSanitizer ãš Canary ã¿ã°ã䜿çšããã¹ã¿ãã¯ä¿è·ã®ãµããŒããè¿œå ãããŸããã
- ã-fanalyzerãéçåæã¢ãŒãã®ç¶ç¶çãªæ¹åãããã¯ãããã°ã©ã å
ã®ã³ãŒãå®è¡ãã¹ãšããŒã¿ ãããŒã®ãªãœãŒã¹ã倧éã«æ¶è²»ããããã·ãŒãžã£éåæãå®è¡ããŸãããã®ã¢ãŒãã¯ã1 ã€ã®ã¡ã¢ãªé åã«å¯Ÿãã free() é¢æ°ã®äºéåŒã³åºãããã¡ã€ã«èšè¿°åã®ãªãŒã¯ãéåç
§ãš null ãã€ã³ã¿ã®åãæž¡ãã解æŸãããã¡ã¢ãª ãããã¯ãžã®ã¢ã¯ã»ã¹ãåæåãããŠããªãå€ã®äœ¿çšãªã©ã®åé¡ãã³ã³ãã€ã«æ®µéã§æ€åºã§ããŸããæ°ããããŒãžã§ã³ã§ã¯:
- ããã°ã©ã ã®ç¶æ ã远跡ããã³ãŒãã¯å®å šã«æžãçŽãããŸãããéåžžã«å€§ã㪠C ãã¡ã€ã«ã®ã¹ãã£ã³ã«é¢ããåé¡ã¯è§£æ±ºãããŸããã
- åæ C++ ãµããŒããè¿œå ããŸããã
- ã¡ã¢ãªå²ãåœãŠãšå²ãåœãŠè§£é€ã®åæã¯ãç¹å®ã® malloc ããã³ free é¢æ°ããæœè±¡åãããnew/delete ããã³ new[]/delete[] ããµããŒãããããã«ãªããŸããã
- æ°ããèŠåãè¿œå ããŸãã: -Wanalyzer-shift-count-negativeã-Wanalyzer-shift-count-overflowã-Wanalyzer-write-to-constãããã³ -Wanalyzer-write-to-string-literalã
- æ°ãããããã° ãªãã·ã§ã³ -fdump-analyzer-json ããã³ -fno-analyzer-feasibility ãè¿œå ããŸããã
- GCC ã®ãã©ã°ã€ã³ãéããŠã¢ãã©ã€ã¶ãŒãæ¡åŒµããæ©èœãå®è£ ãããŸãã (ããšãã°ãCPython ã§ã®ã°ããŒãã« ãã㯠(GIL) ã®èª€ã£ã䜿çšããã§ãã¯ãããã©ã°ã€ã³ãçšæãããŠããŸã)ã
åºæïŒ ãªãŒãã³ããã.ru