php 内存池,内存详解: 详解PHP内存池中的存储层_php
php的内存管理器是分层(hierarchical)的。这个管理器共有三层:存储层(storage)、堆(heap)层和 emalloc/efree 层。存储层通过 malloc()、mmap() 等函数向系统真正的申请内存,并通过free()函数释放所申请的内存。
存储层通常申请的内存块都比较大,这里申请的内存大并不是指storage层结构所需要的内存大,只是堆层通过调用存储层的分配方法时,其以段的格式申请的内存比较大,存储层的作用是将内存分配的方式对堆层透明化。
首先看storage层的结构:
/* Heaps with user defined storage */
typedef struct _zend_mm_storage zend_mm_storage;
http://www.gaodaima.com/50936.html内存详解: 详解PHP内存池中的存储层_php
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); //初始化函数
void (*dtor)(zend_mm_storage *storage); //析构函数
void (*compact)(zend_mm_storage *storage);
zend_mm_segment* (*_alloc)(zend_mm_storage *storage, size_t size); //内存分配函数
zend_mm_segment* (*_realloc)(zend_mm_storage *storage, zend_mm_segment *ptr, size_t size); //重新分配内存函数
void (*_free)(zend_mm_storage *storage, zend_mm_segment *ptr); //释放内存函数
} zend_mm_mem_handlers;
struct _zend_mm_storage {
const zend_mm_mem_handlers *handlers; //处理函数集
void *data;
};
内存的分配方式,调用的函数是_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种内存分配方案,分别对应实现了zend_mm_mem_handlers中的各个处理函数。配合代码的简单说明如下:
/* 使用mmap内存映射函数分配内存 写入时拷贝的私有映射,并且匿名映射,映射区不与任何文件关联。*/
# 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
欢迎大家阅读《内存详解: 详解PHP内存池中的存储层_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码
微信 赏一包辣条吧~
支付宝 赏一听可乐吧~
php 内存池,内存详解: 详解PHP内存池中的存储层_php相关推荐
- LwIP 之六 详解内存池(memp.c/h)动态内存管理策略
对于嵌入式开发来说,内存管理及使用是至关重要的,内存的使用多少.内存泄漏等时刻需要注意!合理的内存管理策略将从根本上决定内存分配和回收效率,最终决定系统的整体性能.LwIP 就提供了 动态内存堆管 ...
- java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解
本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...
- JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)
JVM(Java虚拟机) JVM 内存模型 结构图 jdk1.8 结构图(极简) jdk1.8 结构图(简单) JVM(Java虚拟机): 是一个抽象的计算模型. 如同一台真实的机器,它有自己的指令集 ...
- Java内存模型(JMM)详解-可见性volatile
这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...
- 三星服务器内存条型号区分,三星内存铭牌详解|三星内存条标签内存参数详解...
三星内存铭牌详解|三星内存条标签内存参数详解 大多数朋友都清楚内存铭牌上,记录着内存的重要数据.但是大多数朋友都对此不甚了然!为此小编也想学习下,现在把相关的学习笔记分享出来,希望和朋友们显摆下,小编 ...
- 共享内存映射之mmap()函数详解
转 共享内存映射之mmap()函数详解 /span> 查看全文 http://www.taodudu.cc/news/show-3175071.html 相关文章: 子集生成(二进制法,逐步生成 ...
- 内存测试工具memtester使用详解
memtester的下载地址:http://pyropus.ca/software/memtester/ 有源码安装包.deb包.rpm包等. 源码已经编译好,在linux下只要make一下就好了. ...
- 阿里云AMD服务器ECS计算型c7a、通用型g7a和内存型r7a性能参数详解
阿里云第二代AMD服务器ECS计算型c7a.通用型g7a和内存型r7a实例,CPU采用2.55 GHz主频的AMD EPYCTM MILAN处理器,单核睿频最高3.5 GHz,算力更强,云服务器吧详细 ...
- 内存和CPU匹配方法详解
目录 1.内存和CPU的有关数据 2.内存跟CPU搭配的基本原则 3.在Intel平台实现频率同步的方法 4.在Intel平台实现带宽相等的计算方法 5.在Intel平台用主板调控内存运行参数的方法 ...
最新文章
- GMIS 2017大会Saman Farid演讲:人工智能时代创业者面对的挑战和机会
- java元婴期(18)----java进阶(spring(2)----DI(依赖注入)基于注解的IOC与DI配置properties)
- (Mybatis)使用注解开发
- python迭代器与生成器_Python的迭代器和生成器
- 腾讯云副总裁答治茜:移动互联网破局要借助“三张网”
- 信息学奥赛一本通(1093:计算多项式的值)
- vue 指令 v-if v-else-if v-else
- mysql语句命令_MySQL语句和命令大全
- itk_option
- 20个开发人员非常有用的Java功能代码(一)
- python 简明教程
- HowNet介绍及相关API的使用方法
- 社区发现算法————总结
- 咪蒙注销后,我用Python对其1013篇历史文章做了一次深度的数据分析...
- Scrapy爬虫框架,入门案例(非常详细)
- 2008年度中国最佳MBA排行榜
- oracle 表字段拆分,oracle 字段拆分
- Mysql占用CPU过高排查过程及可能优化方案
- pr制作节奏感抖动(变换)
- 让你一步步成为运维专家之各种运维脚本
热门文章
- 什么是Java中的守护程序线程?
- 为什么不能在字符串上使用switch语句?
- cf烟雾头怎么调win7系统
- CRT远程工具连接服务器CentOS
- 双亲委托类加载机制_图解JVM类加载机制和双亲委派模型
- python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...
- JAVA:json解析
- paramiko模块_玩转网络自动化之Netmiko模块
- python编写命令行框架_使用 Python 和 Click 编写命令行应用程序
- 开源linux 二进制工具,谷歌开源二进制文件对比工具 BinDiff