A Microsoft lançou sob a licença MIT uma biblioteca com implementações de um sistema de alocação de memória, originalmente criado para componentes runtime de linguagens e . Mimalloc é adaptado para uso em aplicativos padrão sem alterações em seu código e pode atuar como uma substituição transparente para a função malloc. É compatível com Windows, macOS, Linux, BSD e outros sistemas Unix-like.
Uma característica chave do mimalloc é a compactação da implementação (menos de 3500 linhas de código) e um desempenho muito alto. Nos o mimalloc superou todas as bibliotecas de alocação de memória concorrentes em desempenho, incluindo , , , e .
Para avaliar o desempenho, foi utilizado um conjunto já existente de Em alguns testes, o mimalloc supera outros sistemas por várias vezes; por exemplo, no teste de migração de objetos entre diferentes threads, o mimalloc foi mais rápido que tcmalloc e jemalloc em mais de 2,5 vezes. Além disso, na maioria dos testes também foi observada uma menor utilização de memória, e em algumas situações, o consumo de memória foi reduzido em até 25%.

A alta performance é alcançada principalmente através do uso de segmentação da lista de blocos livres (free list sharding). Em vez de uma única lista grande, o mimalloc utiliza uma divisão em uma série de listas menores, cada uma associada a uma página de memória. Essa abordagem reduz a fragmentação e melhora a localização de dados na memória. Uma página de memória é entendida como um conjunto agrupado de blocos próximos em tamanho. Em sistemas de 64 bits, o tamanho da página geralmente é de 64 KB. Caso não haja blocos ocupados na página, ela é totalmente liberada, retornando a memória ao sistema operacional, o que ajuda a reduzir os custos de memória e a fragmentação em programas que funcionam por longos períodos.
A biblioteca pode ser conectada em tempo de link ou carregada para um programa já compilado ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). A biblioteca também fornece para integrar funcionalidades em tempo de execução e gerenciar finamente o comportamento, por exemplo, para conectar manipuladores de liberação de memória tardia e aumentar monotonamente os contadores de referências. Há a possibilidade de criar e usar várias "pilhas" (heap) no aplicativo para alocar em diferentes áreas de memória. Incluindo a possibilidade de liberar a pilha completamente, sem varredura ou liberação separada dos objetos alocados nela.
Está prevista a possibilidade de compilar a biblioteca em modo seguro, onde, nas fronteiras dos blocos, são inseridas páginas de verificação especiais de memória (guard-page), além de randomização na alocação de blocos e criptografia das listas de blocos liberados. Essas medidas ajudam a bloquear a maioria das técnicas típicas de exploração de estouro de buffer na pilha. Ao ativar o modo seguro, o desempenho é reduzido em cerca de 3%.
Entre as características do mimalloc, destaca-se a resistência a problemas de inchaço, mesmo com alta fragmentação. No pior cenário, o consumo de memória aumenta em 0,2% para metadados e pode chegar a 16,7% para a memória alocada. Para excluir conflitos no acesso a recursos, o mimalloc utiliza apenas operações atômicas.
Fonte: opennet.ru
