ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ MiΡrosoft ΠΎΡΠΊΡΡΠ»Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»Ρ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ·ΡΠΊΠΎΠ² ΠΈ . Mimalloc Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠΈΠΏΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ malloc. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π² Windows, macOS, Linux, BSD ΠΈ Π΄ΡΡΠ³ΠΈΡ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .
ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ mimalloc ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΌΠ΅Π½Π΅Π΅, ΡΠ΅ΠΌ 3500 ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°) ΠΈ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Π mimalloc ΠΎΠ±ΠΎΠ³Π½Π°Π» ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ , , , ΠΈ .
ΠΠ»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π½Π°Π±ΠΎΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΡΠ°Ρ mimalloc ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ°Π·Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅ΡΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ mimalloc ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΡΡΡΡΠ΅Π΅ tcmalloc ΠΈ jemalloc Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 2.5 ΡΠ°Π·Π°. ΠΡΠΈ ΡΡΠΎΠΌ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ΅ΡΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΡΠ°ΡΡ ΠΎΠ΄ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΄Π°ΡΡΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π° 25%.

ΠΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π·Π° ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² (free list sharding). ΠΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² mimalloc ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ Π±Π»ΠΈΠ·ΠΊΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ Π±Π»ΠΎΠΊΠΎΠ². ΠΠ° 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 64 ΠΠ. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π² ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅ ΠΎΡΡΠ°ΡΡΡΡ Π·Π°Π½ΡΡΡΡ Π±Π»ΠΎΠΊΠΎΠ², ΠΎΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ Π·Π°ΡΡΠ°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ .
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΈΡΡ Π΄Π»Ρ ΡΠΆΠ΅ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Β«LD_PRELOAD=/usr/bin/libmimalloc.so myprogramΒ»). Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π² runtime ΠΈ ΡΠΎΠ½ΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΡΡΡΡΠΈΠΊΠΎΠ² ΡΡΡΠ»ΠΎΠΊ. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Β«ΠΊΡΡΒ» (heap) Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΡΡΠΈ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ Π² Π½Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π° Π³ΡΠ°Π½ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ (guard-page), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π½Π΄ΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ². ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΌΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΠΏΠΎΠ²ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π±ΡΡΠ΅ΡΠΎΠ² Π² ΠΊΡΡΠ΅. ΠΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ½ΠΈΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° 3%.
ΠΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ mimalloc ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΡΠ°Π·Π΄ΡΡΠΈΠ΅ΠΌ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. Π Π½Π°ΠΈΡ ΡΠ΄ΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ Π½Π° 0.2% Π΄Π»Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ 16.7% Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π² mimalloc ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
