- 论坛徽章:
- 0
|
内存分配为了避免写的不好的扩展丢失内存,ZE使用附加的标志来执行自己内部的内存管理器以标识持久性。持久分配的内存意味着比单次请求更持久。对比之下,对于在请求期间的非持久分配,不论是否调用释放(内存)函数,都将在请求尾期被释放。例如,用户空间的变量被分配为非持久的,因为请求结束后它们就没用了。
然而,理论上,扩展可以依赖ZE在页面请求结束时自动释放非持久内存,但是不推荐这样做。因为分配的内存将在很长时间保持为未回收状态,与之相关联的资源可能得不到适当的关闭,并且吃饭不擦嘴是坏习惯。稍后你会发现,事实上确保所有分配的数据都被正确清理很容易。
让我们简单地比较传统的内存分配函数(只应当在外部库中使用)和PHP/ZE的持久的以及非持久的内存非配函数。
传统的 非持久的 持久的 malloc(count)
calloc(count, num) emalloc(count)
ecalloc(count, num) pemalloc(count, 1)*
pecalloc(count, num, 1) strdup(str)
strndup(str, len) estrdup(str)
estrndup(str, len) pestrdup(str, 1)
pemalloc() & memcpy() free(ptr) efree(ptr) pefree(ptr, 1) realloc(ptr, newsize) erealloc(ptr, newsize) perealloc(ptr, newsize, 1) malloc(count * num + extr)** safe_emalloc(count, num, extr) safe_pemalloc(count, num, extr) * pemalloc()族包含一个‘持久’标志以允许它们实现对应的非持久函数的功能。
例如:emalloc(1234)与pemalloc(1234, 0)相同。
** safe_emalloc()和(PHP 5中的)safe_pemalloc()执行附加检测以防整数溢出。 |
|