Microsoft abriu o código para o sistema de asignación de memoria mimalloc

Microsoft abriu unha biblioteca baixo a licenza MIT mmalloc a partir de implementacións dun sistema de asignación de memoria creado orixinalmente para compoñentes de execución de linguaxes Koka и Mova. Mimalloc está adaptado para o seu uso en aplicacións estándar sen cambiar o seu código e pode actuar como un substituto transparente para a función malloc. Admite o traballo en Windows, macOS, Linux, BSD e outros sistemas similares a Unix.

A característica fundamental de mimalloc é a súa implementación compacta (menos de 3500 liñas de código) e un rendemento moi elevado. EN probas realizadas mimalloc superou a todas as bibliotecas de asignación de memoria da competencia, incluíndo jemalloc, tcmalloc, snmalloc, rpmalloc и Acordo.

Para avaliar o rendemento, un conxunto de existentes probas estándar Nalgunhas probas, mimalloc é moitas veces máis rápido que outros sistemas; por exemplo, na proba de migración de obxectos entre diferentes fíos, mimalloc resultou ser máis de 2.5 veces máis rápido que tcmalloc e jemalloc. Ao mesmo tempo, na maioría das probas tamén se observa un menor consumo de memoria; nalgunhas situacións, o consumo de memoria pódese reducir nun 25%.

Microsoft abriu o código para o sistema de asignación de memoria mimalloc

O alto rendemento conséguese principalmente mediante o uso de fragmentos de listas gratuítos. En lugar dunha lista grande, mimalloc usa unha serie de listas máis pequenas, cada unha das cales está ligada a unha páxina de memoria. Este enfoque reduce a fragmentación e aumenta a localización dos datos na memoria. Unha páxina de memoria é un conxunto agrupado de bloques de tamaño similar. Nos sistemas de 64 bits, o tamaño da páxina adoita ser de 64 KB. Se non quedan bloques ocupados na páxina, esta liberarase completamente e a memoria devólvese ao sistema operativo, o que reduce os custos de memoria e a fragmentación en programas de longa duración.

A biblioteca pódese incluír na fase de ligazón ou cargarse para un programa xa montado ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). A biblioteca tamén ofrece API para integrar funcionalidades no tempo de execución e control de comportamento detallado, por exemplo, para conectar controladores de liberación de memoria preguiceiro e contadores de referencia que aumentan monótonamente. É posible crear e utilizar varios "montóns" nunha aplicación para a súa distribución en diferentes áreas de memoria. Tamén é posible liberar o montón por completo, sen atravesar e liberar por separado os obxectos colocados nel.

É posible construír a biblioteca nun modo seguro, no que se substitúen páxinas especiais de verificación de memoria (páxinas de garda) nos límites dos bloques e utilízase a distribución aleatoria de bloques e o cifrado de listas de bloques liberados. Estas medidas permítenche bloquear as técnicas máis típicas para explotar os desbordamentos de búfer baseados no montón. Cando activas o modo seguro, o rendemento diminúe aproximadamente un 3 %.

Entre as características de mimalloc, tamén se sinala que non é susceptible a problemas de inchazo debido á gran fragmentación. No peor dos casos, o consumo de memoria aumenta un 0.2% para os metadatos e pode chegar ao 16.7% para a memoria distribuída. Para evitar conflitos ao acceder aos recursos, mimalloc só utiliza operacións atómicas.

Fonte: opennet.ru

Engadir un comentario