PHP 内存管理
现在是说说 PHP 内存管理器的好时机。
PHP 内存管理器 API 看起来很像经典的 libc malloc API,但它使用独立的堆,而且针对 PHP 的需求进行了特别优化。通常,在请求处理过程中分配的所有内存都应在请求结束时一次性释放。PHP 分配器经过特别优化,可以在不造成系统内存碎片的情况下快速释放内存。它还避免了线程安全检查,因为即使在多线程环境中,每个 PHP 线程也将使用单独的堆。
-
emalloc(size_t size) - 在 PHP 请求堆中分配指定大小的内存并返回指针。
-
safe_emalloc(size_t num, size_t size, size_t offset) - 用(size * num + offset)计算所需内存量,检查是否可能溢出,并分配与 emalloc() 类似的内存。
-
ecalloc(size_t num, size_t size, size_t offset) - 分配与 safe_emalloc() 类似的内存,并清除内存(以零字节填充)。
-
erealloc(void *ptr, size_t new_size) - 重新分配之前在 PHP 请求堆中分配的指针。该函数可能会截断或扩展已分配的内存块,可能会将其移动到另一个内存位置,或就地重新调整大小。如果 ptr 为 NULL,则等同于 emalloc()。
-
efree(void *ptr) - 释放之前在 PHP 请求堆中分配的内存块。
Zend/zend_alloc.h 中定义了完整的 Zend 内存管理器 API。