Pourquoi msvcrt (très très) lent?

Je demande spécifiquement à propos de l’ancien msvcrt.dll . Microsoft n’a-t-il pas mis à jour cette bibliothèque dans les nouvelles versions de Windows? ou est-ce que c’est exactement la même bibliothèque que l’on peut trouver dans les dissortingbutions Windows 98?

J’ai testé msvcrt contre Cygwin avec un programme de test qui appelle souvent malloc par une queue bloquant des listes à liens simples avec des mutex et des sémaphores. Par ifdef , le programme peut être compilé pour utiliser les fonctions Posix ou utiliser les appels API Windows. Lorsque compilé par MinGW avec WinAPI appelle la seule dépendance dont il dispose est kernel32.dll , ntdll.dll et msvcrt.dll , tandis que compilé par Cygwin avec des fonctions Posix, le programme dépend de cygwin1.dll .

Au début, j’ai tout simplement supposé que la version de Cygwin fonctionnerait plus lentement en raison de la couche d’émulation supplémentaire pour les fonctions Posix; il doit les traduire en appels WinAPI. Mais il semble que sa machine soit 4 fois plus rapide que le binary natif compilé par MinGW.

La documentation de Cygwin indique qu’elle utilise une autre bibliothèque appelée newlib, et le binary compilé par Cygwin ne semble certainement pas dépendre de msvcrt. Cela fait-il donc une énorme différence de vitesse?

J’ai également constaté auparavant que, lorsqu’un programme en C appelle des millions de malloc , un programme qui dépend de msvcrt.dll s’exécutera plusieurs fois plus lentement que les autres, en fonction du dernier msvcrXX.dll . Ils ont même exécuté plus lentement que le même programme fonctionnant sous une machine virtuelle Linux.

Quel est le problème avec msvcrt.dll ? Devrais-je l’éviter autant que possible?