2016-11-15 2 views

Antwort

1

PHP hat Müll-gesammeltes Speichermanagement. Normalerweise geben Sie es nicht manuell/forciert frei, es wird GC'd, wenn es keine Referenzen mehr gibt. Sie müssen jedoch Referenzen richtig verwenden.

In der documentation, werfen Sie einen Blick auf die Z_ADDREF, Z_DECREF und zval_ptr_dtor. Es gibt auch eine Z_FREE, aber Sie sollten diese nicht generell verwenden - Sie wollen nicht zwangsweise eine zval freigeben, die in anderen "live" (erreichbaren) Werten referenziert wird!

Eine Übersicht über die Verwendung des Referenzsystems mit konkreten Beispielen für den entsprechenden einfachen PHP-Code finden Sie unter reference tutorial in der Dokumentation.

Ihre Frage genau zu beantworten: MAKE_STD_ZVAL startet den Wert mit einem Referenzzähler 1. So einen einzigen Aufruf

zval_ptr_dtor(zval_); 

werden, dass der Bezug entfernen und löschen Sie die Variable bei der nächsten GC Iteration ab (und im Gegensatz zu Z_FREE das wird das Richtige tun, auch wenn Sie den Wert an eine Funktion übergeben, die ihn irgendwo speichern und seine Ref-Zählung erhöhen könnte, usw. ...)

Verwandte Themen