php tsrmg,php garbage collect
按照之前的一樣先把所有的宏列出來
#define GC_G(v) ZEND_TSRMG(gc_globals_id, zend_gc_globals *, v)
#else
#define GC_G(v) (gc_globals.v)
extern ZEND_API zend_gc_globals gc_globals;
#endif
然后看到初始化
ZEND_API void gc_init(void) // gc 初始化變量
{
if (GC_G(buf) == NULL && GC_G(gc_enabled)) {
GC_G(buf) = (gc_root_buffer*) malloc(sizeof(gc_root_buffer) * GC_ROOT_BUFFER_MAX_ENTRIES);
GC_G(last_unused) = &GC_G(buf)[GC_ROOT_BUFFER_MAX_ENTRIES];
gc_reset();
}
}
ZEND_API void gc_reset(void)
{
...
GC_G(roots).next = &GC_G(roots); // root 自己引用自己
GC_G(roots).prev = &GC_G(roots); // root 自己引用自己
GC_G(to_free).next = &GC_G(to_free); // 和上面一樣
GC_G(to_free).prev = &GC_G(to_free);
if (GC_G(buf)) {
GC_G(unused) = NULL;
GC_G(first_unused) = GC_G(buf) + 1;
} else {
GC_G(unused) = NULL;
GC_G(first_unused) = NULL;
GC_G(last_unused) = NULL;
}
GC_G(additional_buffer) = NULL; // 也是一個環型雙向鏈表
}
總結
以上是生活随笔為你收集整理的php tsrmg,php garbage collect的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在php中怎么引用已经定义过的变量,变量
- 下一篇: 动态规划算法php,php算法学习之动态