Microsoft เป„เบ”เป‰เป€เบ›เบตเบ”เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ mimalloc

Microsoft เป„เบ”เป‰เป€เบ›เบตเบ”เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” MIT mmalloc เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš runtime เบ‚เบญเบ‡เบžเบฒเบชเบฒ Koka ะธ Lean. Mimalloc เบ–เบทเบเบ”เบฑเบ”เปเบ›เบ‡เป€เบžเบทเปˆเบญเปƒเบŠเป‰เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ—เบตเปˆเป‚เบ›เปˆเบ‡เปƒเบชเบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ malloc. เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™ Windows, macOS, Linux, BSD เปเบฅเบฐเบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบš Unix.

เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ mimalloc เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบซเบ™เบฒเปเบซเบ™เป‰เบ™เบ‚เบญเบ‡เบกเบฑเบ™ (เบฅเบฐเบซเบฑเบ”เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 3500 เป€เบชเบฑเป‰เบ™) เปเบฅเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบซเบผเบฒเบ. IN เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹ mimalloc เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ”เบตเบเบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบฅเบงเบกเบ—เบฑเบ‡ เปเบˆเบกเบฅเบญเบ, tcmalloc, snmalloc, rpmalloc ะธ เบ‚เบธเบก.

เป€เบžเบทเปˆเบญเบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบŠเบธเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบกเบฒเบ”โ€‹เบ•เบฐโ€‹เบ–เบฒเบ™โ€‹ เปƒเบ™เบšเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, mimalloc เปเบกเปˆเบ™เป„เบงเบเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™เป†เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒ; เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบงเบฑเบ”เบ–เบธเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฐเบ—เบนเป‰เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, mimalloc เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป„เบงเบเบงเปˆเบฒ tcmalloc เปเบฅเบฐ jemalloc เบซเบผเบฒเบเบเบงเปˆเบฒ 2.5 เป€เบ—เบปเปˆเบฒ. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปˆเบงเบ™เปƒเบซเบเปˆ, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ•เปˆเปเบฒเบเบฑเบ‡เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™; เปƒเบ™เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡ 25%.

Microsoft เป„เบ”เป‰เป€เบ›เบตเบ”เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ mimalloc

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ sharding เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบŸเบฃเบต. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบซเบเปˆเบซเบ™เบถเปˆเบ‡, mimalloc เปƒเบŠเป‰เบŠเบธเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒ, เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบŠเปˆเบงเบเบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ เปเบฅเบฐเป€เบžเบตเปˆเบกเบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ. เบซเบ™เป‰เบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปเบกเปˆเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบšเบฅเบฑเบญเบเบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เปƒเบ™เบฅเบฐเบšเบปเบš 64-bit, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเปเบกเปˆเบ™ 64 KB. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบšเบฅเบฑเบญเบเบ—เบตเปˆเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป„เบงเป‰เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒ, เบกเบฑเบ™เบ–เบทเบเบ›เบปเบ”เบ›เปˆเบญเบเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปเบฅเบฐเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบฅเบฐเบเบฒเบ™เปเบ•เบเปเบเบเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™.

เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบซเบผเบทเป‚เบซเบฅเบ”เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ›เบฐเบเบญเบšเปเบฅเป‰เบง (โ€œLD_PRELOAD=/usr/bin/libmimalloc.so myprogramโ€). เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡ API เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบชเบปเบกโ€‹เบ›เบฐโ€‹เบชเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™ runtime เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เป„เบซเบกโ€‹, เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบ•เบปเบงโ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบโ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒโ€‹เบ—เบตเปˆโ€‹เบŠเบฑเบโ€‹เบŠเป‰เบฒโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เบ•เบปเบงโ€‹เบ™เบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเป‰เบฒเบ‡โ€‹เบญเบตเบ‡ monotonicallyโ€‹. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฒเบ "heap" เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเปƒเบ™เบ—เบปเปˆเบงเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เปˆเบญเบ heap เบ—เบฑเบ‡เบซเบกเบปเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบœเปˆเบฒเบ™เปเบฅเบฐเปเบเบเบญเบญเบเบˆเบฒเบเบชเบดเปˆเบ‡เบ‚เบญเบ‡เบ—เบตเปˆเบงเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™.

เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เป‚เบซเบกเบ”เบ—เบตเปˆเบ›เบญเบ”เป„เบž, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบซเบ™เป‰เบฒเบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบžเบดเป€เบชเบ” (เบซเบ™เป‰เบฒเบเบญเบ‡) เป„เบ”เป‰เบ–เบทเบเบ—เบปเบ”เปเบ—เบ™เปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบšเบฅเบฑเบญเบ, เปเบฅเบฐเบเบฒเบ™เบชเบธเปˆเบกเบเบฒเบ™เปเบˆเบเบขเบฒเบเบšเบฅเบฑเบญเบเปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบฅเบฑเบญเบเบ—เบตเปˆเบ–เบทเบเบ›เบปเบ”เบ›เปˆเบญเบเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบกเบฒเบ”เบ•เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเบฐเบเบฑเบ”เป€เบ•เบฑเบเบ™เบดเบเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบธเบ”เบ„เบปเป‰เบ™ buffer overflows เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ heap. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰ Safe Mode, เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบˆเบฐเบซเบผเบธเบ”เบฅเบปเบ‡เบ›เบฐเบกเบฒเบ™ 3%.

เปƒเบ™เบšเบฑเบ™เบ”เบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ mimalloc, เบกเบฑเบ™เบเบฑเบ‡เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบญเปˆเบญเบ™เป„เบซเบงเบ•เปเปˆเบเบฑเบšเบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™ bloating เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เปเบ•เบเปเบเบเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 0.2% เบชเปเบฒเบฅเบฑเบš metadata เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธ 16.7% เบชเปเบฒเบฅเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ. เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, mimalloc เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™