php的扩展和嵌入--php内存管理
php对内存的管理机制相当的详尽,它在这一点上更类似与java的垃圾回收机制。而对于c语言或者c++大部分时候都只能由程序员自己把申请的空间释放掉。在php中,由于要应对成千上万的连接,同时这些连接往往还需要保持很长的时间。这并不同于c中程序结束了相应的内存块就会被回收。
所以仅仅依靠程序员在写程序的时候注意内存回收是不够的,php肯定要有一些自己内部的、与连接相关的内存管理机制来保证不发生任何的内存泄露。
在本文中,首先对php的内存机制进行一个介绍:
那些在c语言中的空间函数,比如malloc() free() strdup() realloc() calloc(),php中会有不同的形式。
返还申请的内存:对于程序员来说,每一块申请的内存都应该返还,如果不还就会导致内存泄漏。在那些不要求一直运行的程序中,稍许的内存泄漏在整个进程被杀掉之后就结束了。但是类似于apache这种一直运行的web server,小的内存泄漏最终会导致程序的崩溃。
错误处理的例子:
在进行错误处理的时候,采用的机制一般是是Zend Engine会设定一个跳出地址,一旦发生exit或die或任何严重错误E_ERROR的时候,就会利用一个longjmp()跳到这个地址上面去。但是这种做法几乎都会导致内存泄漏。因为free的操作都会被跳掉。(这个问题在c++里面也同样存在,就是在设计类的时候,绝不要把错误处理或告警函数写在构造或者析构函数内,同样的原因,由于对象已经处在了销毁或创建的阶段,所以任何错误函数处理都可能打断这一过程,从而可能导致内存泄漏。)下面的代码中就给出了这样的一个例子:void call_function(const char *fname, int fname_len TSRMLS_DC){ zend_function *fe; char *lcase_fname; /* PHP function names are case-insensitive to simplify locating them in the function tables all function names are implicitly * translated to lowercase */ lcase_fname = estrndup(fname, fname_len);//创造一个函数名的副本 zend_str_tolower(lcase_fname, fname_len);//都转换成小写,这样的寻找的时候很方便,这应该也是php函数表中进行函数标识的方式。 if (zend_hash_find(EG(function_table), lcase_fname, fname_len + 1, (void **)&fe) == FAILURE) {?SUCCESS。这个是要在函数表里面寻找待调用的函数。 zend_execute(fe->op_array TSRMLS_CC); } else { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Call to undefined function: %s()", fname); //等同于Trigger_error() } efree(lcase_fname);}在这个例子中,提供了一个php在调用函数时候的功能。当php调用函数时,需要到函数表也就是function_table中去寻找相应的函数,而在寻找之前要先转换到小写字母,这样在寻找的时候可以提高查找的效率。而通过zend_hash_find函数如果找到了要调用的函数,就使用zend_execute进行调用。而如果没找到的haunted就要跳出报错,显示没找到。但是问题来了,注意之前为了寻找函数创建了一个小写版本的函数名字符串。这个字符串一直到用到zend_hash_find函数,一旦没找到进入了报错之后,那么这个字符串所对应的内存空间必然就找不回来了,这就造成了内存的泄露。
因此,php提供了Zend内存管理,Zend memory management也称为ZendMM。

- php中的内存管理与操作系统的机制类似,但是对象是针对每一个请求所涉及的内存的。
- 除此之外ZendMM还会控制ini文件里面规定的memZ喎
报名学习加微信/QQ 1602007,关注《东方联盟网》微信公众号
>更多相关文章
- 02-25谷歌推行Tango 3D智能视效手机开发项目
- 12-22php $_server应用
- 12-22PHP 解决一次因压缩代码引发的死循环
- 12-22php jquery 多文件上传
- 12-22该如何使用thinkphp分表呢?
- 12-22thinkPHP模板的输出和模型的使用
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 04-08岚图汽车:一季度海外订单同比增长205%
- 04-08小米汽车回应大家关心的问题:事故车起火并
- 03-29黑客组织攻击纽约大学官网,泄露 300万学生
- 03-29阿里妈妈广告自研AI模型LMA升级至万亿级参数
- 03-29筑牢食品安全防线 构建放心消费环境
相关文章
24小时热门资讯
热门推荐
最新资讯
操作系统
黑客防御