Maison  >  Article  >  développement back-end  >  Plusieurs zones de mémoire php

Plusieurs zones de mémoire php

(*-*)浩
(*-*)浩original
2019-09-28 11:38:513260parcourir

Plusieurs zones de mémoire php

Divisé en plusieurs zones de mémoire

1 Zone de pile (pile) - déterminée par le compilateur lorsque le. le programme est en cours d'exécution. Allocation automatique, stockage des valeurs des paramètres de fonction, des valeurs des variables locales, etc. Il fonctionne comme une pile dans une structure de données. Il est automatiquement libéré par le compilateur à la fin du programme. (Apprentissage recommandé : Tutoriel vidéo PHP)

2 Zone de tas (tas) - ouvrez une autre zone de stockage dans la mémoire. Généralement, le programmeur l'alloue et le libère. Si le programmeur ne le libère pas, il peut être recyclé par le système d'exploitation à la fin du programme. Notez que c'est différent du tas dans la structure de données. La méthode d'allocation est similaire à une liste chaînée, haha. Les fonctions qui allouent de la mémoire à l'aide de malloc, calloc, realloc, etc. allouent de la mémoire sur le tas.

Les variables globales et les variables statiques sont stockées ensemble. Pour le langage C, les variables globales initialisées et les variables statiques se trouvent dans une zone, et les variables globales non initialisées et les variables statiques non initialisées se trouvent dans une autre zone adjacente. Il n'y a pas une telle différence en C++ - il est publié par le système après la fin du programme

4 Zone constante littérale - la chaîne constante est placée ici.

Libéré par le système après la fin du programme

5. Zone de code de programme - stocke le code binaire du corps de la fonction.

Lors de la programmation en langage C, les développeurs doivent effectuer la gestion de la mémoire manuellement.

Étant donné que PHP est souvent utilisé comme module pour les serveurs Web, la gestion de la mémoire est étroitement liée à la prévention des fuites de mémoire.

Sachez également que PHP peut être utilisé dans un environnement threadé, ce qui signifie que les variables globales peuvent provoquer des conditions de concurrence. Pour plus d’informations sur la gestion globale des données au sein d’un thread, consultez Thread-Safe Resource Manager en tant qu’installation d’isolation de thread.

De plus, le moteur Zend doit faire face à un modèle d'utilisation très particulier : dans un laps de temps relativement court, de nombreux blocs de mémoire de la taille d'une structure zval et d'autres petits blocs de mémoire sont demandés puis libérés. La gestion de la mémoire de PHP attache également une grande importance à memory_limit (limite de mémoire).

Remarque :

Contrairement aux parties similaires à la bibliothèque standard C, si une erreur se produit lors de l'allocation de la mémoire demandée, la fonction de gestion de la mémoire du moteur Zend ne renverra pas de valeur NULL, mais sautera et abandonnez la requête en cours.

Comme mentionné ci-dessus, prévenir les fuites de mémoire et libérer toute la mémoire le plus rapidement possible est une partie importante de la gestion de la mémoire. Pour des raisons de sécurité, le moteur Zend libère toute la mémoire allouée par l'API mentionnée ci-dessus à la fin de la requête. Cela produira un avertissement si PHP est construit avec l'option de configuration --enable-debug.

Alarme de fuite pour PHP

ZEND_FUNCTION(leak)
{
    long leakbytes = 3;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &leakbytes) == FAILURE) {
        return;
    }

    emalloc(leakbytes);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn