PHP ZVAL は、PHP で最も重要なデータ構造の 1 つです。PHP の変数の値と型に関する情報が含まれています。構造体です。基本的な構造は [struct _zval_struct (zvalue_value value zend_uchar type )] 。
#PHP ZVAL の意味:
ZVAL の基本構造 #Zval は PHP で最も重要なデータ構造の 1 つ (もう 1 つの重要なデータ構造は
ハッシュ テーブル)、PHP の変数の値と型に関する情報が含まれています。 これは構造体であり、基本的な構造は次のとおりです:
struct _zval_struct { zvalue_value value; /* 存储变量的值*/ zend_uint refcount__gc; /* 表示引用计数 */ zend_uchar type; /* 变量具体的类型 */ zend_uchar is_ref__gc; /* 表示是否为引用 */ }; typedef struct _zval_struct zval;
その中には:
1、zval_value value
変数の実際の値、特に
zvalue_value:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct { /* string */
char *val;
int len;
} str;
HashTable *ht; /* hash table value,used for array */
zend_object_value obj; /* object */
} zvalue_value;</pre><div class="contentsignin">ログイン後にコピー</div></div>
の和集合zend_uint refcount__gc
この値は実際には、シンボル テーブル (シンボル テーブル) に存在する変数 (またはシンボル、シンボル、すべてのシンボル) の数を保存するために使用されるカウンターです。異なるスコープは異なるシンボルテーブルを使用します。これについては後で説明します) zval を指します。
変数が生成されると、その refcount=1 になります。a=b などの一般的な代入操作では zval の refcount が 1 ずつ増加し、設定解除操作ではそれに応じて 1 ずつ減少します。 PHP5.3 より前では、GC の実装に参照カウント メカニズムが使用されていました。zval の refcount が 0 未満の場合、Zend エンジンは zval を指す変数がないと判断し、占有されていたメモリ領域を解放していました。ズヴァルによって。
しかし、物事はそれほど単純ではない場合もあります。 zval を指す変数が設定されていない場合でも、単純な参照カウント メカニズムでは循環参照される zval を GC できず、その結果メモリ リーク (メモリ リーク) が発生することが後でわかります。
3.
zend_uchar type
phpsrc/Zend/zend.h
):#define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 #define IS_RESOURCE 7 #define IS_CONSTANT 8 #define IS_CONSTANT_ARRAY 9 #define IS_CALLABLE 10
# 4. is_ref__gc
このフィールドは、変数が参照変数であるかどうかをマークするために使用されます。通常の変数の場合は値が 0、参照変数の場合は値が 1 になります。この変数は、zval の共有、分離などに影響します。これについては後で説明します。
名前が示すように、
ref_count__gcと
is_ref__gc は、PHP の GC メカニズムに必要な 2 つの非常に重要なフィールドです。これら 2 つのフィールドの値は、チェックで渡すことができます。 xdebug などのデバッグ ツール。
PHP プログラミングの入門から熟練度まで
以上がPHP ZVAL とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。