From 89ca358cdb13f0dfa875acf637b53682ad7042bf Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Wed, 2 Dec 2015 16:47:25 +0800 Subject: [PATCH 1/8] =?UTF-8?q?struct=E5=90=8D=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2.4.md b/2.4.md index e6c4289..67bcb8e 100644 --- a/2.4.md +++ b/2.4.md @@ -13,7 +13,7 @@ (因为它们分属两个符号表,一个当前作用域的,一个全局作用域的)。 如果不是在一个函数里,则全局作用域的符号表处于激活状态。 -我们现在打开Zend/zend_globals.h文件,看一下_zend_execution_globals结构体,会在其中发现这么两个element: +我们现在打开Zend/zend_globals.h文件,看一下_zend_executor_globals结构体,会在其中发现这么两个element: ````c struct _zend_executor_globals { From 7af7f55af215e2eba7e5bfa53bc112a4e086febc Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Wed, 2 Dec 2015 17:54:51 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.1.md b/3.1.md index e157859..7e56e87 100644 --- a/3.1.md +++ b/3.1.md @@ -11,7 +11,7 @@ } ```` -在PHP内核中,大多数情况下都不应改直接使用C语言中自带着malloc、free、strdup、realloc、calloc等操作内存的函数,而应使用内核提供的操作内存的函数,这样可以由内核整体统一的来管理内存。 +在PHP内核中,大多数情况下都不应该直接使用C语言中自带着malloc、free、strdup、realloc、calloc等操作内存的函数,而应使用内核提供的操作内存的函数,这样可以由内核整体统一的来管理内存。 ### Free the Mallocs 每个平台操作内存的方式都是差不多的有两个方面,一负责申请,二负责释放。如果应用程序向系统申请内存,系统便会在内存中寻找还没有被使用的地方,如果有合适的,便分配给这个程序,并标记下来,不再给其它的程序了。如果一个内存块没有释放,而所有者应用程序也永远不再使用它了。那么,我们就称其为"内存泄漏",那么这部分内存就无法再为其它程序所用了。 在一个典型的客户端应用程序中,偶尔的小量的内存泄漏是可以被操作系统容忍的,因为在进程结束后该泄漏内存会被返回给OS。这并没有什么高科技含量,因为OS知道它把该内存分配给了哪个程序,并且它能够在一个程序结束后把这些内存给回收回来。 From 9457504db860df1f32bbd7633d4670a816301161 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 11:48:32 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=A0=87=E9=A2=98=E5=86=99=E9=94=99?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.2.md b/3.2.md index e3ae005..80b7063 100644 --- a/3.2.md +++ b/3.2.md @@ -1,4 +1,4 @@ -# 3.2 内存管理 +# 3.2 引用计数 对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全的申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免。我们来看下面这段PHP代码: ````php From 2b9854b9baaff8d8c70b9ec3265cd396f3e31981 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 11:49:08 +0800 Subject: [PATCH 4/8] Update 3.2.md --- 3.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.2.md b/3.2.md index 80b7063..a8d74e8 100644 --- a/3.2.md +++ b/3.2.md @@ -126,5 +126,5 @@ The answer is: 不可能!在这种情况下,变量的值必须分离成两 ## links * 3.1 [内存管理](<3.1.md>) - * 3.3 [3.3 第三章总结](<3.3.md>) + * 3.3 [第三章总结](<3.3.md>) From e3409d10b0f1918ec402e221653f7587a120b100 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 11:56:48 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.2.md b/3.2.md index a8d74e8..9b39199 100644 --- a/3.2.md +++ b/3.2.md @@ -43,7 +43,7 @@ unset($a); ```` 从代码逻辑来看,我们希望语句执行后$a仍然是1,而$b则需要变成6。我们知道在第二句完成后内核通过让$a和$b共享一个zval结构来达到节省内存的目的,但是现在第三句来了,这时$b的改变应该怎样在内核中实现呢? -答案非常简单,内核首先查看refcount__gc属性,如果它大于1则为这个变化的变量从原zval结构中复制出一份新的专属与$b的zval来,并改变其值。 +答案非常简单,内核首先查看refcount__gc属性,如果它大于1则为这个变化的变量从原zval结构中复制出一份新的专属于$b的zval来,并改变其值。 ````c zval *get_var_and_separate(char *varname, int varname_len TSRMLS_DC) { From 8d6cae46c765eb635bd6d21484a3192a1e1b6f62 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 12:22:28 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4.md b/4.md index 7a65982..530c852 100644 --- a/4.md +++ b/4.md @@ -11,6 +11,6 @@ ## links - * 3.3 [3.3 第三章总结](<3.3.md>) + * 3.3 [第三章总结](<3.3.md>) * 4.1 [编译前的准备](<4.1.md>) From c35fbb38f974d28ba08e1fba11895826661de896 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 12:25:10 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=A0=87=E9=A2=98=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4.1.md b/4.1.md index 40ccbd6..f57e05c 100644 --- a/4.1.md +++ b/4.1.md @@ -1,4 +1,4 @@ -# 4.1 动手编译PHP +# 4.1 编译前的准备 从一个PHP程序猿,到一个想为PHP开发扩展的程序猿,此间的进化有一步是跳不过去的,那就是你必须熟知如何编译PHP的源码。 ### *nix Tools From b6b539c3a3e7050b8b22efd093917be010138498 Mon Sep 17 00:00:00 2001 From: Chuanzheng Wang Date: Thu, 3 Dec 2015 12:34:39 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BB=8Egithub=20?= =?UTF-8?q?=E4=B8=8B=E8=BD=BDphp-src?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.1.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/4.1.md b/4.1.md index f57e05c..a17715c 100644 --- a/4.1.md +++ b/4.1.md @@ -37,6 +37,17 @@ $ cd php-src
  • PHP HEAD: svn checkout https://svn.php.net/repository/php/php-src/trunk php-src-trunk
  • 最新的大家可以来这查看:http://php.net/svn.php + +除了上述从SVN导出源码方式,目前(2015年)php-src也可以从github下载, +``` +git clone git://github.com/php/php-src.git php-src +cd php-src + +#签出特定的分支版本,例如 +git checkout PHP-5.5 +``` +php-src在github上的页面是https://github.com/php/php-src 。 + ### Win32 Tools 这里仅代表作者05年的观点,我还没有在win平台下测试过,稍後会把这段修正过来。