第 6 章 内存管理
C 程序员通常必须手动处理内存。对于动态内存,程序员在需要时分配内存,并在完成后释放内存。无法释放动态内存会导致 “内存泄漏”,这可能是也可能不是坏事。在 PHP 的情况下,由于进程可以存活几乎无限长的时间,因此产生内存泄漏将非常严重。在任何情况下,内存泄漏实际上都意味着程序设计不当且不可信任。内存泄漏很容易理解。您要求操作系统为您预订部分主机内存,但您从未告诉它将其释放给其他进程使用:您在机器上并不孤单,其他进程也需要一些内存,操作系统本身也需要。
此外,在 C 语言中,内存区域有明确的边界。在边界之前或之后读取或写入都是非常糟糕的操作。这肯定会导致程序崩溃,更糟糕的是会产生可被利用的安全问题。C 语言没有自动调整区域大小这样的神奇功能。你必须清楚地告诉机器(和 CPU)你想要它做什么。没有猜测,没有魔法,没有任何自动化(如垃圾回收)。
PHP 有一个非常具体的内存模型,并在传统 libc 的动态内存分配器上提供了自己的层。这一层称为 Zend Memory Manager。
本章向您解释什么是 Zend Memory Manager、您必须如何使用它以及您必须/不能用它做什么。之后,我们将快速向您介绍在 C 领域用于调试动态内存的特定工具。
如果需要,请了解一些有关 C 语言内存分配类(静态内存与动态内存)和 libc 分配器的知识。 |