// 1. zval
typedef struct _zval_struct zval;
// 2. zvalue_value
typedef union _zvalue_value str;
hashtable *ht; // 用於陣列
zend_object_value obj; // 用於物件
zend_ast *ast; // 用於常量表示式(php5.6 才有)
} zvalue_value;
// 3. zend_object_value
typedef struct _zend_object_value zend_object_value;
// 4. zend_object_handle
typedef unsigned int zend_object_handle;
多數文章,在提到php5 變數結構體的時候,都提到:sizeof(zval) == 24, sizeof(zvalue_value) == 16
,實際上這個論述並不準確,在 cpu 為 64bit 時,這個結果是正確的。
但當 cpu 為32bit 時:sizeof(zval) == 16, sizeof(zvalue_value) == 8
,主要因為 cpu 為 64bit 時,指標占用8個位元組,而 32bit時,指標為4個位元組。
// 1. zval
struct _zval_struct v;
uint32_t type_info;
} u1;
union u2;
};// 2. zend_value
typedef union _zend_value ww;
} zend_value;
php 7的看似很多,但其實更簡單了,不論 cpu 是32bit 還是 64bit,sizeof(zval) 永遠都是等於 16。
主要看 zend_value 中的 ww,是兩個 uint32_t,這個永遠是 8 個位元組,所以 sizeof(zend_value) == 8,因此 sizeof(zval) == 16。
所以 php7 新特性提到的節省記憶體這點上,在 32bit 系統中,php5 => php7 並無變化。順便說下 sizeof,不能當做函式,雖然寫法像函式,這個數值會在編譯期就確定好,非執行期。類似編譯預處理。
有關sizeof的詳情,可以看:
這個csdn 文章的排版雖然有些亂,但總結的都是精華,耐心看完,理解透徹後,就很容理解我上面的分析。
**:
徹底搞懂SSD網路結構
還是得從下圖說起,之前一直沒實際搞清楚。ssd的網路結構流程如下圖所示 ssd總共11個block,相比較於之前的vgg16,改變了第5個block的第4層,第6 7 8卷積層全部去掉,分別增加了紅框 黑框 黃框 藍框。tensorflow 如下 with tf.variable scope sco...
結構體型別 結構體變數 結構體陣列 結構體指標
問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...
和結構體 結構體型別與結構體變數
結構體 struct 是由一系列具有相同型別或不同型別的資料構成的資料集合,叫做結構體。在c語言中,結構體 struct 指的是一種資料結構,是c語言中聚合資料型別 aggregate data type 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素...