亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

詳解PHP內(nèi)存池中的存儲層

添加時間:2014-9-17 3:25:03  添加: 思海網(wǎng)絡(luò) 
PHP的內(nèi)存管理器是分層(hierarchical)的。這個管理器共有三層:存儲層(storage)、堆(heap)層和 emalloc/efree 層。存儲層通過 malloc()、mmap() 等函數(shù)向系統(tǒng)真正的申請內(nèi)存,并通過free()函數(shù)釋放所申請的內(nèi)存。
存儲層通常申請的內(nèi)存塊都比較大,這里申請的內(nèi)存大并不是指storage層結(jié)構(gòu)所需要的內(nèi)存大,只是堆層通過調(diào)用存儲層的分配方法時,其以段的格式申請的內(nèi)存比較大,存儲層的作用是將內(nèi)存分配的方式對堆層透明化。
首先看storage層的結(jié)構(gòu):
/* Heaps with user defined storage */  
typedef struct _zend_mm_storage zend_mm_storage;  
   
typedef struct _zend_mm_segment {  
    size_t    size;  
    struct _zend_mm_segment *next_segment;  
} zend_mm_segment;  
   
typedef struct _zend_mm_mem_handlers {  
    const char *name;  
    zend_mm_storage* (*init)(void *params);    //初始化函數(shù)  
    void (*dtor)(zend_mm_storage *storage);    //析構(gòu)函數(shù)  
    void (*compact)(zend_mm_storage *storage);  
    zend_mm_segment* (*_alloc)(zend_mm_storage *storage, size_t size);    //內(nèi)存分配函數(shù)  
    zend_mm_segment* (*_realloc)(zend_mm_storage *storage, zend_mm_segment *ptr, size_t size);    //重新分配內(nèi)存函數(shù)  
    void (*_free)(zend_mm_storage *storage, zend_mm_segment *ptr);    //釋放內(nèi)存函數(shù)  
} zend_mm_mem_handlers;  
   
struct _zend_mm_storage {  
    const zend_mm_mem_handlers *handlers;    //處理函數(shù)集  
    void *data;  
};  
內(nèi)存的分配方式,調(diào)用的函數(shù)是_zend_mm_storage結(jié)構(gòu)中的處理函數(shù)集,而內(nèi)存是以段的形式表現(xiàn)的。
4種內(nèi)存方案
PHP在存儲層共有4種內(nèi)存分配方案: malloc,win32,mmap_anon,mmap_zero。默認使用malloc分配內(nèi)存,如果設(shè)置了ZEND_WIN32宏,則為windows版本,調(diào)用HeapAlloc分配內(nèi)存,剩下兩種內(nèi)存方案為匿名內(nèi)存映射,并且PHP的內(nèi)存方案可以通過設(shè)置變量來修改。
官方說明如下:
The Zend MM can be tweaked using ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE environment variables. Default values are “malloc” and “256K”.Dependent on target system you can also use “mmap_anon”, “mmap_zero” and “win32″ storage managers.
在代碼中,對于這4種內(nèi)存分配方案,分別對應(yīng)實現(xiàn)了zend_mm_mem_handlers中的各個處理函數(shù)。配合代碼的簡單說明如下:
/* 使用mmap內(nèi)存映射函數(shù)分配內(nèi)存 寫入時拷貝的私有映射,并且匿名映射,映射區(qū)不與任何文件關(guān)聯(lián)。*/  

# define ZEND_MM_MEM_MMAP_ANON_DSC {"mmap_anon", zend_mm_mem_dummy_init, zend_mm_mem_dummy_dtor, zend_mm_mem_dummy_compact, zend_mm_mem_mmap_anon_alloc, zend_mm_mem_mmap_realloc, zend_mm_mem_mmap_free}   具體可參考http://www.cxybl.com/html/wlbc/Php/20130922/40142.html

關(guān)鍵字:PHP、存儲層、內(nèi)存

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站