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 { 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知道它把该内存分配给了哪个程序,并且它能够在一个程序结束后把这些内存给回收回来。 diff --git a/3.2.md b/3.2.md index e3ae005..9b39199 100644 --- a/3.2.md +++ b/3.2.md @@ -1,4 +1,4 @@ -# 3.2 内存管理 +# 3.2 引用计数 对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全的申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免。我们来看下面这段PHP代码: ````php @@ -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) { @@ -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>) diff --git a/4.1.md b/4.1.md index 40ccbd6..a17715c 100644 --- a/4.1.md +++ b/4.1.md @@ -1,4 +1,4 @@ -# 4.1 动手编译PHP +# 4.1 编译前的准备 从一个PHP程序猿,到一个想为PHP开发扩展的程序猿,此间的进化有一步是跳不过去的,那就是你必须熟知如何编译PHP的源码。 ### *nix Tools @@ -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平台下测试过,稍後会把这段修正过来。
    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>)