Wie die Variable freigegeben, die mit dem folgenden Code erstellt wurde?Wie man zval in PHP5, das mit MAKE_STD_ZVAL erstellt wurde, freigibt?
zval *zval_ = nullptr;
MAKE_STD_ZVAL(zval_);
ZVAL_NULL(zval_);
Wie die Variable freigegeben, die mit dem folgenden Code erstellt wurde?Wie man zval in PHP5, das mit MAKE_STD_ZVAL erstellt wurde, freigibt?
zval *zval_ = nullptr;
MAKE_STD_ZVAL(zval_);
ZVAL_NULL(zval_);
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. ...)