


Que se passe-t-il lorsque la désactivation libère de la mémoire en php ?
Tout d'abord, est-ce que sera désactivé dans la mémoire de version PHP ?
Regardons d'abord un exemple :
var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
Sortie (dans On différents ordinateurs personnels, cela peut varier en raison des différents systèmes, versions de PHP et extensions chargées) :
int(90440) int(90640) int(90472
Notez que 90472-90440=32, il existe donc différents conclusions. Certaines personnes disent que la désactivation de PHP ne libère pas vraiment de mémoire, et d'autres disent que la désactivation de PHP ne libère que de grandes variables (un grand nombre de chaînes , de grands tableaux libéreront vraiment de la mémoire, et certaines personnes même). dire que cela n'a aucun sens de discuter de la mémoire au niveau PHP.
Alors, unset libérera-t-il la mémoire ? Où sont passés ces 32 octets ?
Pour répondre Pour cette question, je vais partir de deux aspects :
Où sont passés ces 32 octets ?
Tout d'abord nous devons rompre avec une réflexion : PHP n'est pas comme le langage C, seuls les appels que vous affichez. L'allocation de mémoire se produit uniquement avec les API liées à la mémoire.
En d'autres termes, en PHP, il existe de nombreux processus d'allocation de mémoire que nous ne pouvons pas voir
Par exemple :
$a = "laruence";
Implicit Les points d'allocation de mémoire sont :
1. Allouez de la mémoire pour nom de la variable et stockez-la dans la table des symboles
2. Allouez de la mémoire pour la valeur de la variable
Par conséquent, vous ne pouvez pas simplement regarder l'apparence
Deuxièmement. , Ne doutez pas que le non-set de PHP libérera effectivement de la mémoire (bien sûr, il faut aussi le combiner avec des références et du comptage. Pour cette partie, veuillez vous référer à mon article précédent pour une compréhension approfondie des principes de PHP : séparation/référence de variable), mais cette version n'est pas une version au sens de la programmation C, elle n'est pas restituée au système d'exploitation
Pour PHP, elle fournit un ensemble d'API de gestion de la mémoire similaire au langage C pour la mémoire. Ces API sont similaires à l'API C. En conséquence, la mémoire est gérée en interne dans PHP via ces API
Lorsque nous appelons emalloc pour demander de la mémoire, PHP ne demande pas simplement de la mémoire au système d'exploitation, mais le fera. demandez au système d'exploitation un gros bloc de mémoire, puis allouez-en une partie au demandeur, de sorte que lorsqu'il existe une logique de demande de mémoire, il n'est pas nécessaire de demander de la mémoire au système d'exploitation, évitant ainsi les appels système fréquents. 🎜>
Par exemple, comme suit Exemple :
Copier après la connexion
Sortie :
int(262144) int(262144) int(262144
$a dans , PHP ne le fait pas. Il n'y a pas de demande de nouvelle mémoire du système.
De même, lorsque nous appelons efree pour libérer de la mémoire, PHP ne rendra pas la mémoire au système d'exploitation, mais mettra cette mémoire dans la liste de mémoire libre maintenue par lui-même . Pour les petits morceaux de mémoire, il est plus probable de la mettre dans la liste de cache mémoire (postscript, certaines versions de PHP, comme PHP5.2.4, 5.2.6, 5.2.8 que j'ai vérifié, lors de l'appel de get_memory_usage(), la taille du bloc de mémoire disponible dans la liste du cache mémoire ne sera pas soustraite, ce qui fera apparaître que la mémoire reste inchangée après une désactivation).Maintenant laissez-moi vous répondre où vont ces 32 octets. Allez, comme je viens de le dire, de nombreux processus d'allocation de mémoire ne sont pas explicitesVous comprendrez après avoir lu le code suivant :
Copier après la connexion
90808-90808 = 0, normal, c'est à dire que ces 32 octets sont occupés par la fonction de sortie (à proprement parler, ils sont occupés par le Header de sortie)
string(43) "I am php.cn" int(90808) //赋值前 int(90976) int(90808) //是的, 内存正常释放
Un tableau qui ne fait qu'augmenter mais ne diminue jamais
Hashtable est la structure de base de PHP (pour comprendre Hashtable, vous pouvez vous référer à mon article précédent pour comprendre les tableaux en PHP (ordre de parcours)), et les tableaux sont également représentés par celui-ci, et la table des symboles est également un tableau associatif, pour le code suivant :
Le code est le suivant :
Nous avons défini 100 variables, puis cliquez sur Annuler pour voir le résultat :var_dump("I am www.php.cn"); var_dump(memory_get_usage()); $array = array_fill(1, 100, "laruence"); foreach ($array as $key => $value) { ${$value . $key} = NULL; } var_dump(memory_get_usage()); foreach ($array as $key=> $value) { unset(${$value . $key}); } var_dump(memory_get_usage());
string(43) "I am php.cn" int(93560) int(118848) int(104448
En effet, pour Hashtable Said, lors de sa définition, il est impossible d'allouer suffisamment de blocs de mémoire à la fois pour enregistrer un nombre inconnu d'éléments, donc PHP n'allouera qu'une petite partie du bloc de mémoire à HashTable lors de l'initialisation, puis utilisez-le quand cela ne suffit pas. L'expansion RESIZE,
et Hashtable ne peuvent qu'agrandir, pas réduire. Pour l'exemple ci-dessus, lorsque nous avons stocké 100 variables, la table des symboles n'était pas suffisante, nous avons donc fait une expansion, et lorsque nous séquentiellement Après avoir désactivé ces 100 variables, la mémoire occupée par les variables est libérée (118848 – 104448), mais la table des symboles n'est pas réduite, donc la petite mémoire est occupée par la table des symboles elle-même...
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Selon des informations publiées sur ce site Web le 3 septembre, le média coréen etnews a rapporté hier (heure locale) que les produits de mémoire mobile à structure empilée « de type HBM » de Samsung Electronics et SK Hynix seraient commercialisés après 2026. Des sources ont indiqué que les deux géants coréens de la mémoire considèrent la mémoire mobile empilée comme une source importante de revenus futurs et prévoient d'étendre la « mémoire de type HBM » aux smartphones, tablettes et ordinateurs portables afin de fournir de la puissance à l'IA finale. Selon des rapports précédents sur ce site, le produit de Samsung Electronics s'appelle LPWide I/O memory, et SK Hynix appelle cette technologie VFO. Les deux sociétés ont utilisé à peu près la même voie technique, à savoir combiner emballage en sortance et canaux verticaux. La mémoire LPWide I/O de Samsung Electronics a une largeur de 512 bits.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c
