Tas à faible fragmentation

[Les informations contenues dans cette rubrique s’appliquent à Windows Server 2003 et Windows XP. À compter de Windows Vista, le système utilise le tas à faible fragmentation (LFH) en fonction des besoins pour traiter les demandes d’allocation de mémoire. Les applications n’ont pas besoin d’activer le LFH pour leurs tas.]

La fragmentation du tas est un état dans lequel la mémoire disponible est divisée en petits blocs non contiguants. Lorsqu’un tas est fragmenté, l’allocation de mémoire peut échouer même si la mémoire disponible totale dans le tas est suffisante pour répondre à une demande, car aucun bloc de mémoire unique n’est suffisamment grand. Le tas à faible fragmentation (LFH) permet de réduire la fragmentation du tas.

Le LFH n’est pas un tas distinct. Au lieu de cela, il s’agit d’une stratégie que les applications peuvent activer pour leurs tas. Lorsque le LFH est activé, le système alloue de la mémoire dans certaines tailles prédéterminées. Lorsqu’une application demande une allocation de mémoire à partir d’un tas sur lequel le LFH est activé, le système alloue le plus petit bloc de mémoire suffisamment grand pour contenir la taille demandée. Dans l’implémentation actuelle, le système n’utilise pas le LFH pour les allocations supérieures à environ 16 Ko, que le LFH soit activé ou non.

Une application doit activer le LFH uniquement pour le tas par défaut du processus d’appel ou pour les tas privés que l’application a créés. Pour activer le LFH pour un tas, utilisez la fonction GetProcessHeap pour obtenir un handle vers le tas par défaut du processus appelant, ou utilisez le handle dans un tas privé créé par la fonction HeapCreate . Appelez ensuite la fonction HeapSetInformation avec le handle.

Le LFH ne peut pas être activé pour les tas créés avec HEAP_NO_SERIALIZE ou pour les tas créés avec une taille fixe. Le LFH ne peut pas non plus être activé si vous utilisez les outils de débogage de tas dans Outils de débogage pour Windows ou Application Verifier.

Une fois le LFH activé pour un tas, il ne peut pas être désactivé.

Les applications qui bénéficient le plus du LFH sont des applications multithreads qui allouent fréquemment de la mémoire et utilisent une variété de tailles d’allocation confortablement inférieures à 16 Ko. Toutefois, toutes les applications ne bénéficient pas du LFH. Pour évaluer les effets de l’activation du LFH dans votre application, utilisez les données de profilage des performances.