成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > PHP數(shù)組實(shí)際占用內(nèi)存大小原理解析

PHP數(shù)組實(shí)際占用內(nèi)存大小原理解析

熱門(mén)標(biāo)簽:招標(biāo)自動(dòng)語(yǔ)音外呼系統(tǒng) OMG地圖標(biāo)注app 電銷(xiāo)機(jī)器人便宜的有嗎 400電話(huà)鄭州申請(qǐng) gps 地圖標(biāo)注軟件 地圖標(biāo)注視頻廣告入駐 黔江400電話(huà)如何辦理 ai電話(huà)機(jī)器人加盟代理 中原區(qū)電話(huà)機(jī)器人價(jià)格

一般來(lái)說(shuō),PHP數(shù)組的內(nèi)存利用率只有 1/10, 也就是說(shuō),一個(gè)在C語(yǔ)言里面100M 內(nèi)存的數(shù)組,在PHP里面就要1G。下面我們可以粗略的估算PHP數(shù)組占用內(nèi)存的大小,首先我們測(cè)試1000個(gè)元素的整數(shù)占用的內(nèi)存:

?php 
  echo memory_get_usage() , 'br>'; 
  $start = memory_get_usage(); 
  $a = Array(); 
  for ($i=0; $i1000; $i++) { 
  $a[$i] = $i + $i; 
  } 
  $mid = memory_get_usage(); 
  echo memory_get_usage() , 'br>'; 
  for ($i=1000; $i2000; $i++) { 
  $a[$i] = $i + $i; 
  } 
  $end = memory_get_usage(); 
  echo memory_get_usage() , 'br>'; 
  echo 'argv:', ($mid - $start)/1000 ,'bytes' , 'br>'; 
  echo 'argv:',($end - $mid)/1000 ,'bytes' , 'br>'; 

輸出是:

353352
437848
522024
argv:84.416bytes
argv:84.176bytes

大概了解1000 個(gè)元素的整數(shù)數(shù)組需要占用 82k 內(nèi)存,平均每個(gè)元素占用 84 個(gè)字節(jié)。而純 C 中整體只需要 4k(一個(gè)整型占用4byte * 1000 )。memory_get_usage() 返回的結(jié)果并不是全是被數(shù)組占用了,還要包括一些 PHP 運(yùn)行本身分配的一些結(jié)構(gòu),可能用內(nèi)置函數(shù)生成的數(shù)組更接近真實(shí)的空間:

?php
$start = memory_get_usage();
$a = array_fill(0, 10000, 1);
$mid = memory_get_usage(); //10k elements array;
echo 'argv:', ($mid - $start )/10000,'byte' , 'br>';
$b = array_fill(0, 10000, 1);
$end = memory_get_usage(); //10k elements array;
echo 'argv:', ($end - $mid)/10000 ,'byte' , 'br>';

得到:

argv:54.5792byte
argv:54.5784byte

從這個(gè)結(jié)果來(lái)看似乎一個(gè)數(shù)組元素大約占用了54個(gè)字節(jié)左右。

首先看一下32位機(jī)C語(yǔ)言各種類(lèi)型占用的字節(jié):

#include "stdafx.h" 
//#include stdio.h> 
  
int main() { 
    printf("int:%d\nlong:%d\ndouble:%d\nchar*:%d\nsize_t:%d\n",  
    sizeof(int), sizeof(long),  
    sizeof(double), sizeof(char *),  
    sizeof(size_t)); 
  return  0;  
} 

int:4
long:4
double:8
har*:4
size_t:4

在PHP中都使用long類(lèi)型來(lái)代表數(shù)字,沒(méi)有使用int類(lèi)型

大家都明白PHP是一種弱類(lèi)型的語(yǔ)言,它不會(huì)去區(qū)分變量的類(lèi)型,沒(méi)有int float char *之類(lèi)的概念。

我們看看php在zend里面存儲(chǔ)的變量,PHP中每個(gè)變量都有對(duì)應(yīng)的 zval, Zval結(jié)構(gòu)體定義在Zend/zend.h里面,其結(jié)構(gòu):

typedef struct _zval_struct zval; 
struct _zval_struct { 
  /* Variable information */ 
  zvalue_value value;   /* The value 1 12字節(jié)(32位機(jī)是12,64位機(jī)需要8+4+4=16) */ 
  zend_uint refcount__gc; /* The number of references to this value (for GC) 4字節(jié) */ 
  zend_uchar type;    /* The active type 1字節(jié)*/ 
  zend_uchar is_ref__gc; /* Whether this value is a reference () 1字節(jié)*/ 
}; 

PHP使用一種UNION結(jié)構(gòu)來(lái)存儲(chǔ)變量的值,即zvalue_value 是一個(gè)union,UNION變量所占用的內(nèi)存是由最大

成員數(shù)據(jù)空間決定。

typedef union _zvalue_value { 
  long lval;         /* long value */ 
  double dval;        /* double value */ 
  struct {          /* string value */ 
    char *val; 
    int len; 
  } str;  
  HashTable *ht;       /* hash table value */ 
  zend_object_value obj;   /*object value */ 
} zvalue_value; 

最大成員數(shù)據(jù)空間是struct str,指針占*val用4字節(jié),INT占用4字節(jié),共8字節(jié)。

struct zval占用的空間為8+4+1+1 = 14字節(jié),

其實(shí)呢,在zval中數(shù)組,字符串和對(duì)象還需要另外的存儲(chǔ)結(jié)構(gòu),數(shù)組則是一個(gè) HashTable:

HashTable結(jié)構(gòu)體定義在Zend/zend_hash.h.

typedef struct _hashtable { 
  uint nTableSize;//4 
  uint nTableMask;//4 
  uint nNumOfElements;//4 
  ulong nNextFreeElement;//4 
  Bucket *pInternalPointer;  /* Used for element traversal 4*/ 
  Bucket *pListHead;//4 
  Bucket *pListTail;//4 
  Bucket **arBuckets;//4 
  dtor_func_t pDestructor;//4 
  zend_bool persistent;//1 
  unsigned char nApplyCount;//1 
  zend_bool bApplyProtection;//1 
#if ZEND_DEBUG 
  int inconsistent;//4 
#endif 
} HashTable; 

HashTable 結(jié)構(gòu)需要 39 個(gè)字節(jié),每個(gè)數(shù)組元素存儲(chǔ)在 Bucket 結(jié)構(gòu)中:

typedef struct bucket { 
  ulong h;  /* Used for numeric indexing        4字節(jié) */ 
  uint nKeyLength;  /* The length of the key (for string keys) 4字節(jié) */ 
  void *pData;    /* 4字節(jié)*/ 
  void *pDataPtr;     /* 4字節(jié)*/ 
  struct bucket *pListNext; /* PHP arrays are ordered. This gives the next element in that order4字節(jié)*/ 
  struct bucket *pListLast; /* and this gives the previous element      4字節(jié) */ 
  struct bucket *pNext;   /* The next element in this (doubly) linked list   4字節(jié)*/ 
  struct bucket *pLast;   /* The previous element in this (doubly) linked list   4字節(jié)*/ 
  char arKey[1];      /* Must be last element  1字節(jié)*/ 
} Bucket; 

Bucket 結(jié)構(gòu)需要 33 個(gè)字節(jié),鍵長(zhǎng)超過(guò)四個(gè)字節(jié)的部分附加在 Bucket 后面,而元素值很可能是一個(gè) zval 結(jié)構(gòu),另外每個(gè)數(shù)組會(huì)分配一個(gè)由 arBuckets 指向的 Bucket 指針數(shù)組, 雖然不能說(shuō)每增加一個(gè)元素就需要一個(gè)指針,但是實(shí)際情況可能更糟。這么算來(lái)一個(gè)數(shù)組元素就會(huì)占用 54 個(gè)字節(jié),與上面的估算幾乎一樣。

一個(gè)空數(shù)組至少會(huì)占用 14(zval) + 39(HashTable) + 33(arBuckets) = 86 個(gè)字節(jié),作為一個(gè)變量應(yīng)該在符號(hào)表中有個(gè)位置,也是一個(gè)數(shù)組元素,因此一個(gè)空數(shù)組變量需要 118 個(gè)字節(jié)來(lái)描述和存儲(chǔ)。從空間的角度來(lái)看,小型數(shù)組平均代價(jià)較大,當(dāng)然一個(gè)腳本中不會(huì)充斥數(shù)量很大的小型數(shù)組,可以以較小的空間代價(jià)來(lái)獲取編程上的快捷。但如果將數(shù)組當(dāng)作容器來(lái)使用就是另一番景象了,實(shí)際應(yīng)用經(jīng)常會(huì)遇到多維數(shù)組,而且元素居多。比如10k個(gè)元素的一維數(shù)組大概消耗540k內(nèi)存,而10kx 10 的二維數(shù)組理論上只需要 6M 左右的空間,但是按照 memory_get_usage 的結(jié)果則兩倍于此,[10k,5,2]的三維數(shù)組居然消耗了23M,小型數(shù)組果然是劃不來(lái)的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解PHP的執(zhí)行原理和流程
  • 通過(guò)代碼實(shí)例解析PHP session工作原理
  • 深入解析PHP底層機(jī)制及相關(guān)原理
  • PHP超全局變量實(shí)現(xiàn)原理及代碼解析
  • PHP數(shù)組Key強(qiáng)制類(lèi)型轉(zhuǎn)換實(shí)現(xiàn)原理解析
  • JS PHP字符串截取函數(shù)實(shí)現(xiàn)原理解析
  • PHP unset函數(shù)原理及使用方法解析
  • PHP 命名空間原理與用法詳解
  • 如何理解PHP程序執(zhí)行的過(guò)程原理

標(biāo)簽:孝感 阿里 池州 那曲 日照 濟(jì)源 哈密 北京

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP數(shù)組實(shí)際占用內(nèi)存大小原理解析》,本文關(guān)鍵詞  PHP,數(shù)組,實(shí)際,占用,內(nèi)存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP數(shù)組實(shí)際占用內(nèi)存大小原理解析》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PHP數(shù)組實(shí)際占用內(nèi)存大小原理解析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    依依成人精品视频| 国产精品丝袜黑色高跟鞋| 亚洲午夜一二三区视频| 不卡一区二区中文字幕| 欧美激情精品久久久久久蜜臀| 蜜桃视频中文字幕| 91成品人片a无限观看| 精品久久人妻av中文字幕| 久久久久久久综合色一本| 色综合五月天导航| 91高清视频在线观看| 中文字幕一区2区3区| 日韩免费视频线观看| 日韩精品极品在线观看播放免费视频| 四虎影视成人永久免费观看视频| a视频免费在线观看| 可以直接在线观看的av| 四虎在线视频免费观看| 日日夜夜天天综合| 天堂av免费看| 午夜剧场成人观在线视频免费观看| 国产亚洲精品久久久久久移动网络| 国产精品91免费在线| 国产+成+人+亚洲欧洲自线| 成人黄色大片网站| 国产极品一区二区| 狠狠做深爱婷婷综合一区| 天堂a√在线| 日韩高清免费在线| 亚洲人成电影网站色xx| 国产午夜精品一区二区三区嫩草| 日韩—二三区免费观看av| 欧洲熟妇的性久久久久久| 国产精品白浆流出视频| 日韩视频免费| 粉嫩精品导航导航| 美女洗澡无遮挡| 欧美成人明星100排名| 日韩成人午夜| 色视频www在线播放国产成人| 五月婷婷在线视频| 欧美国产日韩亚洲一区| 欧美吻胸吃奶大尺度电影| 99国产超薄丝袜足j在线观看| 亚洲精品久久7777777| 亚洲午夜私人影院| 精品国产区在线| 亚洲精品国产综合区久久久久久久| 99久久影视| 69xxxx国产| 日本一本在线视频| 欧美一区二区三区四| 999国产在线视频| 欧美a大片欧美片| 亚洲精品555| 日韩中文一区二区| 日韩伦理在线电影| 国产无遮挡又黄又爽免费网站| 狠狠色狠狠色合久久伊人| 婷婷综合在线观看| 99视频资源网| 狠狠色综合网站久久久久久久| 777精品视频| 久久综合色一综合色88| 欧美成人高清在线| 玖玖玖免费嫩草在线影院一区| 亚欧激情乱码久久久久久久久| 91美女在线观看| 国产成人精品999| 国产精品一区三区| 天天综合久久| 开心快乐六月丁香婷婷| 日本免费不卡| 九九视频精品全部免费播放| 在线看你懂得| 国产黄a三级三级三级av在线看| 午夜精品福利视频| 色菇凉天天综合网| 理论片日本一区| 精品视频一区二区三区| 丝袜美女在线观看| 欧美午夜性春猛xxxx| 亚洲欧美精品aaaaaa片| 欧美激情一级二级三级在线视频| 亚洲精品一区二区三区四区五区| av色综合久久天堂av色综合在| 免费能直接在线观看黄的视频| 香蕉久久国产av一区二区| jizzjizzjizz亚洲| 欧美黄网在线观看| 亚洲精品久久久久久无码色欲四季| 国产亚洲日本欧美韩国| 91国语精品自产拍在线观看性色| 亚洲午夜精品久久久久久性色| 国精品无码一区二区三区| 九九精品调教| 国产iv一区二区三区| 精品国产va久久久久久久| www.久久99| 中文字幕亚洲字幕| 91成人免费在线视频| 91人人爽人人爽人人精88v| 国产精品普通话对白| 中文字幕+乱码+中文| 在线看视频你懂得| 午夜爽爽爽男女免费观看影院| 成人av免费| 欧美日韩精品亚洲精品| 韩国日本美国免费毛片| 日韩三级电影网站| 亚洲高清不卡一区| 精品日韩美女| www.91香蕉视频| 亚洲一区免费在线| 国产一区二区成人久久免费影院| 欧美亚洲黄色片| 99国产超薄丝袜足j在线观看| 男的操女的网站| 国产日本欧美视频| 亚洲男女视频在线观看| 国产精品探花在线| 美女又爽又黄视频毛茸茸| 天天综合色天天综合色hd| 日韩精品一区二区三区丰满| 午夜国产在线观看| 午夜婷婷在线观看| 国产精品日日摸夜夜爽| 在线电影欧美成精品| 亚洲av永久纯肉无码精品动漫| 在线一区观看| 欧美另类极品| 国产高清免费av在线| 婷婷亚洲婷婷综合色香五月| 亚洲婷婷伊人| 日韩中文在线视频| 视频在线观看免费影院欧美meiju| 91精品国产综合久久婷婷香蕉| 日韩**中文字幕毛片| 在线国产日韩| 精品亚洲一区二区三区四区| 国产欧美日韩精品高清二区综合区| 国产麻豆视频在线观看| 亚洲精品**不卡在线播he| 亚洲精品aaa| 亚洲成a人片| 日韩三级一区| 日韩在线免费视频| 色综合久久久久久中文网| 草民福利视频| jlzzjlzz欧美| 羞羞的视频网站| 羞羞影视羞羞在线| 96成人在线视频| 99精品老司机免费视频| 日本一本二本在线观看| 亚洲一区二区三区免费视频| 视频一区中文字幕国产| 中文在线a√在线8| 丰满圆润老女人hd| 99久久久国产| 国产精品18久久久| 韩国三级电影在线观看婷婷| 亚洲不卡1卡2卡三卡2021麻豆| 欧美日韩播放| 久久视频这里有精品| 国产剧情麻豆剧果冻传媒视频免费| 精品一区二区三区中文字幕老牛| 4444在线观看| 无码视频一区二区三区| 欧美一级特黄aaaaaa| av在线免费观看网站| 狠狠综合久久久综合| 香蕉网站在线| 色综合久久88色综合天天提莫| 97成人精品区在线播放| 黄色的视频在线免费观看| 欧美另类高清videos| 日本天堂网在线观看| 爱搞国产精品| 久久亚洲精品一区| 国产在线天堂www网在线观看| 你懂的一区二区三区| 欧美久久精品午夜青青大伊人| 香港三级经典全部种子下载| 校园春色 亚洲色图| 久久国产成人精品| 久久99热精品这里久久精品| www.女人的天堂.com| 欧美一级播放| 中文字幕有码av| 国产精品视频久久久久久久| 精品人妻伦一二三区久| 欧美成人精品影院| 性做久久久久久| 国产精品成人免费视频| 色噜噜狠狠色综合网| 成人黄色激情网站| 浅井舞香一区二区| 粉嫩av一区二区三区四区五区| 久久精品国产理论片免费| 啦啦啦在线视频免费观看高清中文| 一本一道波多野结衣一区二区| 日韩欧美三级一区二区| 欧美精品91| 成人性生交大片免费看中文| 国产jizzjizz一区二区| 国产成人短视频| 日本高清一二三区| 国产精品一区二区三区久久| 欧美日韩和欧美的一区二区| 在线观看 亚洲| julia京香一区二区三区| 久久亚洲国产中v天仙www| 日韩欧美一级大片| 黄色片免费看| 日韩欧美成人午夜| 亚洲欧美va天堂人熟伦| 久久久国产精品一区二区三区| 国产精品久一| 日韩精品极品毛片系列视频| 国产精品视频一区二区久久| 永久域名在线精品| av先锋影音少妇| 日韩午夜激情电影| 国产厕拍一区| 91国偷自产一区二区开放时间| eeuss鲁片一区二区三区| 成人免费毛片嘿嘿连载视频| 精品日韩一区二区| 91最新国产视频| 91国产在线免费观看| 老司机免费视频| 亚洲人成亚洲精品| 国产乱在线观看完整版视频| 亚洲美免无码中文字幕在线| 少妇激情av一区二区三区| 色综合久久久久综合| 中文字幕 日本| 欧美性大战久久久久| 国产精品久久久久9999赢消| av成人老司机| 日本免费一区二区三区四区| av女片在线| 女人被狂躁c到高潮| 国产精品中文有码| 红桃av永久久久| 久久中文字幕av| 最新国产精品精品视频| 国产福利一区在线观看| 99在线精品免费视频| 亚洲91精品在线观看| 91成人小视频| 天堂视频免费在线观看| 亚洲午夜激情在线| 国产精品国产三级国产试看| 日日噜噜夜夜狠狠视频欧美人| 欧美日韩免费一区二区三区视频| 久久综合国产精品| 国产午夜精品在线观看| 黑吊大战白xxxxxx| 91高清在线观看视频| av在线收看| 日韩中文av在线| gogo高清在线播放免费| 亚洲精品乱码久久久久久| 日韩免费中文专区| 夜夜嗨网站十八久久| 亚洲欧美偷拍一区| 日韩美女精品在线| 欧美视频在线观看免费网址| 久久久久青草大香线综合精品| 日本中文字幕一区| 欧美亚洲精品在线| 亚洲一二三四久久| 中文字幕乱码人妻无码久久| 五月婷六月丁香| 成人免费无码大片a毛片| 亚洲婷婷综合网| 亚洲欧美日韩综合网| 亚洲色图一二三区| 国产精品爽爽ⅴa在线观看| 亚洲人一二三区| 欧美一区二区性| 无遮挡h肉3d动漫在线观看| 成人黄色在线免费观看| 国产熟女一区二区三区四区| 天天色天天射天天干| 日韩美女主播视频| 久久这里只有精品一区二区| 一区二区三区高清不卡| 国产在线观看免费网站| 隣の若妻さん波多野结衣| 视频国产一区二区| 国产成人在线观看网站| 日产电影一区二区三区| 久久亚洲精品国产亚洲老地址| 日韩一级欧洲| 69堂视频在线观看国产| 成人av网站在线播放| 国产91精品久久久| 白浆视频在线观看| 九九久久综合网站| 精品国产乱码久久久久久免费| 日韩av密桃| 一色屋色费精品视频在线看| 天堂午夜影视日韩欧美一区二区| 久久精品二区亚洲w码| 日韩在线 中文字幕| 久久久精品一区| 欧美丰满艳妇bbwbbw| 538精品在线视频| 久久精品国产成人| 欧美日韩大陆一区二区| 欧美黄色一级大片| 日本三级电影网站| 麻豆国产精品777777在线| 日韩人妻精品中文字幕| 精品一区欧美| 久久国产精品免费一区| 日韩成人精品视频在线观看| 国产成人免费视频网站高清观看视频| 国产又粗又硬又长| 国产精品爽爽ⅴa在线观看| 欧美一卡2卡3卡4卡无卡免费观看水多多| 免费av片风间由美在线| 午夜性色一区二区三区免费视频| 国产91免费观看| 日韩精品免费一区二区|