快速业务通道

PHP内存池中的存储层

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23

  PHP的内存管理器是分层(hierarchical)的。这个管理器共有三层:存储层(storage)、堆(heap)层和 emalloc/efree 层。存储层通过 malloc()、mmap() 等函数向系统真正的申请内存,并通过free()函数释放所申请的内存。

  存储层通常申请的内存块都比较大,这里申请的内存大并不是指storage层结构所需要的内存大,只是堆层通过调用存储层的分配方法时,其以段的格式申请的内存比较大,存储层的作用是将内存分配的方式对堆层透明化。

  首先看storage层的结构:

 

  1. /* Heaps with user defined storage */    
  2. typedef struct _zend_mm_storage zend_mm_storage;    
  3.      
  4. typedef struct _zend_mm_segment {    
  5.     size_t    size;    
  6.     struct _zend_mm_segment *next_segment;    
  7. } zend_mm_segment;    
  8.      
  9. typedef struct _zend_mm_mem_handlers {    
  10.     const char *name;    
  11.     zend_mm_storage* (*init)(void *params);    //初始化函数    
  12.     void (*dtor)(zend_mm_storage *storage);    //析构函数    
  13.     void (*compact)(zend_mm_storage *storage);    
  14.     zend_mm_segment* (*_alloc)(zend_mm_storage *storage, size_t size);    //内存分配函数    
  15.     zend_mm_segment* (*_realloc)(zend_mm_storage *storage, zend_mm_segment *ptr, size_t size);    //重新分配内存函数    
  16.     void (*_free)(zend_mm_storage *storage, zend_mm_segment *ptr);    //释放内存函数    
  17. } zend_mm_mem_handlers;    
  18.      
  19. struct _zend_mm_storage {    
  20.     const zend_mm_mem_handlers *handlers;    //处理函数集    
  21.     void *data;    
  22. };    

  内存的分配方式,调用的函数是_zend_mm_storage结构中的处理函数集,而内存是以段的形式表现的。

  4种内存方案

  PHP在存储层共有4种内存分配方案: malloc,win32,mmap_anon,mmap_zero。默认使用malloc分配内存,如果设置了ZEND_WIN32宏,则为windows版本,调用HeapAlloc分配内存,剩下两种内存方案为匿名内存映射,并且PHP的内存方案可以通过设置变量来修改。

  官方说明如下:

  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种内存分配方案,分别对应实

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号