php - Comment comprendre la fragmentation de la mémoire évoquée dans la programmation en langage C? Pourquoi devriez-vous l'éviter autant que possible ?
滿天的星座
滿天的星座 2017-06-24 09:42:23
0
3
933

La mémoire n'est-elle pas complètement aléatoire en lecture et en écriture ? Il s'agit d'un support physique différent du disque dur mécanique. Alors pourquoi cela affecte-t-il les performances s'il y a des fragments de mémoire dans la mémoire ? À quoi fait exactement référence cette fragmentation de la mémoire ?

滿天的星座
滿天的星座

répondre à tous(3)
女神的闺蜜爱上我

L'allocateur de mémoire s'applique généralement au système d'exploitation pour une grande section de mémoire à l'avance, puis la marque comme non allouée à chaque fois malloc()时标记一小段为已分配,free()cette petite section est allouée.

L'ordre de malloc/free est généralement arbitraire, donc après plusieurs malloc/frees, la mémoire allouée et non allouée alternera, comme 分配1 -- 未分配1 -- 分配2 -- 未分配2, c'est-à-dire que la mémoire non allouée est "fragmentée" une par une.

Inconvénients de la fragmentation de la mémoire :

  • Occupation de mémoire supplémentaire : même si la quantité totale de mémoire non allouée est suffisante, la mémoire continue peut toujours ne pas être séparée. Dans ce cas, vous devez en demander davantage auprès du système d'exploitation

  • .
  • Affecte le cache : Le cache est basé sur les pages, et la partie non allouée d'une page occupe également le cache

phpcn_u1582

Le meilleur moyen est de ne pas utiliser le tas de processus par défaut du système. Au lieu de cela, demandez vous-même un nouveau tas de mémoire. Les données d'un type sont placées dans un tas. Cela convient aux petits éléments de données fréquemment demandés et publiés.
Vous pouvez également allouer vous-même d'abord une grande quantité de données, puis utiliser votre propre pool de mémoire pour la gérer.
Pour le premier, le gestionnaire de fichiers de Windows, Explore, est utile. Par exemple, la structure de l'arborescence des répertoires parcourus est placée dans un tas séparé. HeapFree libère l'intégralité du tas en une seule fois, sans qu'il soit nécessaire de libérer les nœuds feuilles encore et encore.
Deuxièmement, par exemple, libjpeg lui-même dispose d'un pool de mémoire dédié.

为情所困
  • Vous pouvez en apprendre davantage sur l'algorithme de copain

  • Il y a aussi ce PDF

  • Si vous ne pouvez pas l'ouvrir, passez par-dessus le mur

  • Je veux connaître le code source de malloc实现就去看看dlmalloc, ce n'est pas compliqué

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal