以图明志

PHP服务器脚本

[专题] PHP内核探索:内存的申请与销毁

ZendMM会在内存池中分配相应的内存
PHP底层对内存的管理, 围绕着小块内存列表(free_buckets)、 大块内存列表(large_free_buckets)和 剩余内存列表(rest_buckets)三个列表来分层进行的。 ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由ZendMM的最底层(heap层)先向系统申请一大块的内存。

PHP服务器脚本

[专题] PHP内核探索:引用计数与写时复制

引用计数是节省内存的一个超棒的模式
对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全的申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免。

PHP服务器脚本

[专题] PHP内核探索:PHP5.3的垃圾回收机制

解决了无法处理循环的引用内存泄漏问题
在PHP5.3版本之前,PHP只有简单的基于引用计数的垃圾回收,当一个变量的引用计数变为0时, PHP将在内存中销毁这个变量,只是这里的垃圾并不能称之为垃圾。 并且PHP在一个生命周期结束后就会释放此进程/线程所点的内容,这种方式决定了PHP在前期不需要过多考虑内存的泄露问题。

PHP服务器脚本

[专题] PHP内核探索:内存管理中的cache

PHP将缓存添加到内存管理机制中
在维基百科中有这样一段描述: 凡是位于速度相差较大的两种硬件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache。 从最初始的处理器与内存间的Cache开始,都是为了让数据访问的速度适应CPU的处理速度, 其基于的原理是内存中“程序执行与数据访问的局域性行为”。

PHP服务器脚本

[专题] PHP内核探索:写时复制COW机制

在写入时才真正复制一份内存进行修改
写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改。 COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C++的STL等。 在PHP内核中,COW也是主要的内存优化手段。 在前面关于变量和内存的讨论中,引用计数对变量的销毁与回收中起着至关重要的标识作用。

PHP服务器脚本

[专题] PHP内核探索:数组与链表

C语言中数组和链表的一些事情
在C语言中,我们可以自定义各种各样的数据结构,用来把很多数据保存在一个变量里面,但是每种数据结构都有自己的优缺点,PHP内核规模如此庞大,是否已经找到了一些非常棒的解决方法呢?我们在选择各种数据结构时,往往会考虑我们需要处理的数据规模以及需要的性能。下面让我们简要的看一下看C语言中数组和链表的一些事情。

PHP服务器脚本

[专题] PHP内核探索:使用哈希表API

Zend把与HashTable有关的API分成了好几类
Zend把与HashTable有关的API分成了好几类以便于我们寻找,这些API的返回值大多都是常量SUCCESS或者FAILURE。下面在介绍函数原型的时候都使用了ht名称,但是我们在编写扩展的时候,一定不要使用这个名称,因为一些PHP宏展开后会声明这个名称的变量,进而引发命名冲突。

PHP服务器脚本

[专题] PHP内核探索:数组操作

操作HashTable存储zval*
当你在扩展中使用HashTable时候,95%是要存储用户端的变量,就像PHP语言中数组那样。为此,内核中已经准备好了相应的工具,来让我们更加的方便的操作HashTable存储zval*,也就是PHP语言中的数组,即IS_ARRAY常量代表的zval,以下用{数组}来代替PHP语言中的数组这个词。

Web设计理念

今天的Google电吉他Doodle效果很赞

让更多人看到这个神作Doodle
Google今天的涂鸦很给力啊。为了让网友可以多看到这个涂鸦,我觉得保存在我的博客里,如果你也喜欢,分享给朋友们吧。为了纪念电吉他之父莱斯·保罗(Les Paul,1915年6月9日-2009年8月13日)诞辰96周年,Google Doodle又出神作,首页的Logo被设计成一个电吉他形,并且鼠标滑过会弹出美妙的音乐,当你按下键盘图标时,还可以直接用键盘弹奏这个"电吉他"。

PHP服务器脚本

[专题] PHP内核探索:数组源码分析

数组最大的好处便是速度快
PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数组。

PHP服务器脚本

[专题] PHP内核探索:函数的分类

可以在任何被需要的时候执行的代码块
函数是一种可以在任何被需要的时候执行的代码块。它不仅仅包括用户自定义的函数,还包括程序语言实现的库函数。PHP 有很多标准的函数和结构。如我们常见的count、strpos、implode等函数,这些都是标准函数,它们都是由标准扩展提供的; 如我们经常用到的isset、empty、eval等函数,这些结构被称之为语言结构。

PHP服务器脚本

[专题] PHP内核探索:函数的内部结构

在其内部可以实现各种语句的执行
在PHP中,函数有自己的作用域,同时在其内部可以实现各种语句的执行,最后返回最终结果值。 其中的ZEND_USER_FUNCTION是用户函数,ZEND_INTERNAL_FUNCTION是内置的函数。也就是说PHP将内置的函数和用户定义的函数分别保存。

PHP服务器脚本

[专题] PHP内核探索:函数结构转换

不同结构间的强制转换
在函数调用的执行代码中我们会看到这样一些强制转换,这些不同结构间的强制转换是如何进行的呢?首先我们来看zend_function的结构,在Zend/zend_compile.h文件中。这是一个联合体,我们来温习一下联合体的一些特性。 联合体的所有成员变量共享内存中的一块内存,在某个时刻只能有一个成员使用这块内存。

PHP服务器脚本

[专题] PHP内核探索:定义函数的过程

函数的一切从function开始
在PHP中,用户函数的定义从function关键字开始。函数的一切从function开始。我们从function开始函数定义的探索之旅。在 Zend/zend_language_scanner.l中我们找到如下所示的代码:……它所表示的含义是function将会生成T_FUNCTION标记。

PHP服务器脚本

[专题] PHP内核探索:函数的参数

取参数的个数与解析参数列表
前面介绍了函数的定义,函数的定义只是一个将函数名注册到函数列表的过程,在了解了函数的定义后,我们来看看函数的参数。 这一小节将包括用户自定义函数的参数和内部函数的参数两部分。我们对于参数的类型提示做了分析,这里我们在这一小节的基础上,进行一些更详细的说明。

PHP服务器脚本

[专题] PHP内核探索:zend_parse_parameters函数

获取函数调用者传递过来的参数
最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表这参数的个数。
4 / 7 首页 < Prev 2 3 4 5 6 Next > 尾页 页码: