PHP头条
热点:

初始化

在zend_mm_startup启动时,程序会根据配置设置内存分配方案和段分配大小,如下所示代码:

  1. ZEND_API zend_mm_heap *zend_mm_startup(void)  
  2. {  
  3.     int i;  
  4.     size_t seg_size;  
  5.     char *mem_type = getenv("ZEND_MM_MEM_TYPE");  
  6.     char *tmp;  
  7.     const zend_mm_mem_handlers *handlers;  
  8.     zend_mm_heap *heap;  
  9.    
  10.     if (mem_type == NULL) {  
  11.      i = 0;  
  12.     } else {  
  13.      for (i = 0; mem_handlers[i].name; i++) {  
  14.       if (strcmp(mem_handlers[i].name, mem_type) == 0) {  
  15.        break;  
  16.       }  
  17.      }  
  18.      if (!mem_handlers[i].name) {  
  19.       fprintf(stderr, "Wrong or unsupported zend_mm storage type '%s'\n", mem_type);  
  20.       fprintf(stderr, "  supported types:\n");  
  21.       for (i = 0; mem_handlers[i].name; i++) {  
  22.        fprintf(stderr, " '%s'\n", mem_handlers[i].name);  
  23.       }  
  24.       exit(255);  
  25.      }  
  26.     }  
  27.     handlers = &mem_handlers[i];  
  28.    
  29.     tmp = getenv("ZEND_MM_SEG_SIZE");  
  30.     if (tmp) {  
  31.      seg_size = zend_atoi(tmp, 0);  
  32.      if (zend_mm_low_bit(seg_size) != zend_mm_high_bit(seg_size)) {  
  33.       fprintf(stderr, "ZEND_MM_SEG_SIZE must be a power of two\n");  
  34.       exit(255);  
  35.      } else if (seg_size < ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE) {  
  36.       fprintf(stderr, "ZEND_MM_SEG_SIZE is too small\n");  
  37.       exit(255);  
  38.      }  
  39.     } else {  
  40.      seg_size = ZEND_MM_SEG_SIZE;  
  41.     }  
  42.    
  43.     //....代码省略  
  44. }  

第1121~1138行遍历整个mem_handlers数组,确认内存分配方案,如果没有设置ZEND_MM_MEM_TYPE变量,默认使用malloc方案,如果是windows(即ZEND_WIN32),则默认使用win32方案,如果设置了ZEND_MM_MEM_TYPE变量,则采用设置的方案。

第1140~1152行确认段分配大小,如果设置了ZEND_MM_SEG_SIZE变量,则使用设置的大小,此处会判断所设置的大小是否满足2的倍数,并且大于或等于ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE;如果没有设置没使用默认的ZEND_MM_SEG_SIZE。

原文链接:http://www.phppan.com/2010/11/php-source-code-30-memory-pool-storage/


www.phpzy.comtrue/php/10187.htmlTechArticle初始化 在zend_mm_startup启动时,程序会根据配置设置内存分配方案和段分配大小,如下所示代码: ZEND_APIzend_mm_heap*zend_mm_startup(void) { inti; size_tseg_size; char*...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐