摘要:
程序在内存中的存储分为三个区域,分别是动态数据区、静态数据区和代码区。函数存储在代码区,全局变量以及静态变量存储在静态数据区,而在程序执行的时候才会在动态数据区产生数据。程序执行的本质就是代码区的指令不断执行,驱使动态数据区和静态数据区产生数据变化。 代码区与动态数据区由三个寄存器控制,分别是eip 阅读全文
摘要:
老夫生于上世纪五十年代,作为八零后的大叔,九零后的老伯,同时也是你们动辄就要重装的操作系统,我的学名是“计算机管理控制程序”,英译“operating system”,小老弟们常喊我“OS”。虽说是老弟,目的却都不怎么单纯,大部分人只想玩我,剩下一小撮人却钟爱探索我的身体,他们沉迷于当下,但真正愿意了解我过去的所剩无几。今儿个趁机会给你们介绍一下我的过去。 阅读全文
摘要:
在前面大致预览了常用变量的结构之后,我们今天来仔细的剖析一下字符串的具体实现。 一、字符串的结构 zend_refcounted_h对应的结构体: 下面我们来了解一下具体每个成员的作用: gc:就是_zend_refcounted_h结构体,主要作用是引用计数以及标记变量的类别。 h:字符串的哈希值 阅读全文
摘要:
上篇文章讲述了变量的存储结构zval,今天我们就来学习一下几个常见变量类型的基本结构。 一、类型一览 zval中的u1.v.type用来存储变量的类型,而zval.value存储的是不同类型对应的值,所以type决定value取值的地方,以下是PHP7所定义的所有类型。 IS_UNDEF:标记未定义 阅读全文
摘要:
进程的概念和与程序的区别 1、进程的定义 进程是允许某个并发执行的程序在某个数据集合上的运行过程。 进程是由正文段、用户数据段及进程控制块共同组成的执行环境。正文段存放被执行的机器指令,用户数据段存放进程在执行时直接进行操作的用户数据。进程控制块存放程序的运行环境,操作系统通过这些数据描述和管理进程 阅读全文
摘要:
记得网上流传甚广的段子“PHP是世界上最好的语言”,暂且不去讨论是否言过其实,但至少PHP确实有独特优势的,比如它的弱类型,即只需要$符号即可声明变量,使得PHP入手门槛极低,成为大家所青睐的Web服务端语言。那么它的变量是如何实现的呢?我们今天就来学习一下PHP的基本变量。 一、引言 PHP的变量 阅读全文
摘要:
一、程序的顺序执行 在早期无操作系统及单道批处理系统时,程序都是按照顺序进行执行的。先进入内存的先执行,在执行的过程中不能执行其他的程序。程序中的指令也是按照顺序执行,一条指令正在执行时不能开始执行另一条指令。所以程序顺序执行有以下几个特点。 1.1、顺序性 处理机的操作,严格按照顺序执行,前一操作 阅读全文
摘要:
上篇文章讲述了模块初始化阶段之前的准备工作,本篇我来详细介绍PHP生命周期的五个阶段。 一、模块初始化阶段 我们先来看一下该阶段的每个函数的作用。 1.1、sapi_initialize_request_empty函数 这个函数主要为前面定义的SG宏中的成员变量进行初始化。 1.2、sapi_act 阅读全文
摘要:
上一章我们对PHP的源码目录结构有了初步了解,本章我们继续从生命周期的维度对PHP进行剖析。 一、概览 生命周期是什么呢?你可以把它看作执行过程,PHP的生命周期也就是它从开始执行到结束执行的过程。 PHP生命周期有五个阶段,分别为模块初始化阶段、请求初始化阶段、执行阶段、请求关闭阶段、模块关闭阶段 阅读全文
摘要:
上篇文章我们已经介绍了源码分析工具的安装、配置以及调试方法,本文我们来讲述一下PHP源码的目录结构。 一、目录概览 以 为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目录的说明。 目录 | 说明 | TSRM | 线程相关安全的实现 Zend | PHP解析器的核心实现 build | 阅读全文