Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

struct名错别字 #122

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 2.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion 3.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
}

````
在PHP内核中,大多数情况下都不应改直接使用C语言中自带着malloc、free、strdup、realloc、calloc等操作内存的函数,而应使用内核提供的操作内存的函数,这样可以由内核整体统一的来管理内存。
在PHP内核中,大多数情况下都不应该直接使用C语言中自带着malloc、free、strdup、realloc、calloc等操作内存的函数,而应使用内核提供的操作内存的函数,这样可以由内核整体统一的来管理内存。
### Free the Mallocs
每个平台操作内存的方式都是差不多的有两个方面,一负责申请,二负责释放。如果应用程序向系统申请内存,系统便会在内存中寻找还没有被使用的地方,如果有合适的,便分配给这个程序,并标记下来,不再给其它的程序了。如果一个内存块没有释放,而所有者应用程序也永远不再使用它了。那么,我们就称其为"内存泄漏",那么这部分内存就无法再为其它程序所用了。
在一个典型的客户端应用程序中,偶尔的小量的内存泄漏是可以被操作系统容忍的,因为在进程结束后该泄漏内存会被返回给OS。这并没有什么高科技含量,因为OS知道它把该内存分配给了哪个程序,并且它能够在一个程序结束后把这些内存给回收回来。
Expand Down
6 changes: 3 additions & 3 deletions 3.2.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 3.2 内存管理
# 3.2 引用计数

对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全的申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免。我们来看下面这段PHP代码:
````php
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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>)

13 changes: 12 additions & 1 deletion 4.1.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 4.1 动手编译PHP
# 4.1 编译前的准备

从一个PHP程序猿,到一个想为PHP开发扩展的程序猿,此间的进化有一步是跳不过去的,那就是你必须熟知如何编译PHP的源码。
### *nix Tools
Expand Down Expand Up @@ -37,6 +37,17 @@ $ cd php-src
<li>PHP HEAD: svn checkout https://svn.php.net/repository/php/php-src/trunk php-src-trunk </li>
</ul>
最新的大家可以来这查看: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平台下测试过,稍後会把这段修正过来。
<pre>
Expand Down
2 changes: 1 addition & 1 deletion 4.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@


## links
* 3.3 [3.3 第三章总结](<3.3.md>)
* 3.3 [第三章总结](<3.3.md>)
* 4.1 [编译前的准备](<4.1.md>)