PHPz2017-05-16 13:19:02
に基づいています以下の議論はすべて
PHP 5
構造はphp 5.6
的zval
类型(PHP 7
に応じて変更されます)
zend_uchar type
的type
の値は
PHP は type
つまりnull
对php
来说,与bool
/long
比較して、特別な利点はありません
null
变量,表示zvalue_value value
无需赋值,相比String
、Array
需要申请大量内存的操作来说,还是具备一定的优势,但是对比LONG
、BOOL
パフォーマンスの観点からは、このパフォーマンスの利点は基本的に無視できます。説明は次のとおりです。
はブール値と同じくらい小さく、複合配列と同じくらい大きくなります。 php
核心实现中,都是C语言的zVal结构
要約すると、次の PHP ステートメントになります:
リーリー
/usr/bin/php
を実行すると、メモリ内で zVal 構造体
に変換されます。 の値は上で説明しました。その値がどのように保存されるかについては以下で説明します /usr/bin/php
执行到这行时,都会在内存中转化为zVal结构
,type
zvalue_value value
の構造
変数に保存されます。zvalue_value
の構造は次のとおりです。 zvalue_value value
变量中,其中zvalue_value
リーリー
は、一度に1つのメンバーのみが有効であることを意味し、その特徴は、union
在C语言里面是一个联合体
メモリの長さ=最も長いメンバーの長さであることです。 PHP変数で使用されるメンバーは次のとおりです:
リーリー
ただし、および < code>0/false割り当て
Object
、Resource
、Array
上記の表によれば、NULL
型の変数にtype = IS_NULL
を設定した後、value
を割り当てる必要はありませんtype = IS_BOOL / IS_LONG
を設定した後、もう 1 つの割り当てvalue.lval = 0;
を追加します。
value
の member
に値が割り当てられているかどうかに関係なく、メモリを占有する必要があります NULL
类型的变量在设置type = IS_NULL
之后,而无需赋值value
而0/false
赋值在设置type = IS_BOOL / IS_LONG
之后,再多一句赋值value.lval = 0;
、
これはvalue
中的成员
是否赋值,zvalue_value value
メモリのプロセスですが、現代のCPUから見ると、この利点は無視できます。
詳細は http://www.php-internals.com/...NULL
仅仅是少一个赋值 4 bytes
をご覧ください。