最新网站开发技术两个女孩子怎么做网站
最新网站开发技术,两个女孩子怎么做网站,游戏网页游戏,智能手机app开发内存分配策略核心区别就一条#xff1a;┌──────────┬──────────┬───────────────────┐│ │ 作用域 │ 请求结束自动释放 │├──────────┼──────────┼───────────────────┤…内存分配策略 核心区别就一条 ┌──────────┬──────────┬───────────────────┐ │ │ 作用域 │ 请求结束自动释放 │ ├──────────┼──────────┼───────────────────┤ │ emalloc │ 单次请求 │ 是 │ ├──────────┼──────────┼───────────────────┤ │ pemalloc │ 进程级别 │ 否要手动 pefree │ └──────────┴──────────┴───────────────────┘---emalloc 系列常用// 对应关系emalloc(size)// mallocecalloc(n,size)// calloc清零erealloc(ptr,size)// reallocefree(ptr)// freeestrdup(str)// strdupestrndup(str,len)// strndup// 用法char*bufemalloc(1024);memset(buf,0,1024);// ... 用完不用手动efree请求结束Zend自动回收// 但最好还是手动efree避免请求期间内存堆积efree(buf);---pemalloc 系列跨请求用于全局数据// 第二个参数 1 persistent持久0 等同 emallocpemalloc(size,1)pecalloc(n,size,1)perealloc(ptr,size,1)pefree(ptr,1)// 必须手动调进程退出前释放// 典型场景模块初始化时分配连接池staticmyconn*pool;PHP_MINIT_FUNCTION(myext){poolpecalloc(10,sizeof(myconn),1);// 进程级别所有请求共享returnSUCCESS;}PHP_MSHUTDOWN_FUNCTION(myext){pefree(pool,1);// 进程退出时释放returnSUCCESS;}---zend_string 的内存// 请求内分配zend_string*szend_string_init(hello,5,0);// 0 非持久// 跨请求分配比如注册类名、函数名zend_string*szend_string_init(hello,5,1);// 1 持久zend_string_release(s);// 减引用引用为0才真正释放---HashTable 的内存// 请求级别HashTable*htemalloc(sizeof(HashTable));zend_hash_init(ht,8,NULL,ZVAL_PTR_DTOR,0);// 最后参数 0 非持久// 持久级别HashTable*htpemalloc(sizeof(HashTable),1);zend_hash_init(ht,8,NULL,ZVAL_PTR_DTOR,1);// 最后参数 1 持久zend_hash_destroy(ht);pefree(ht,1);---踩坑点// ❌ 错用 emalloc 分配存到全局变量staticchar*global_buf;PHP_RINIT_FUNCTION(myext){global_bufemalloc(1024);// 请求结束被回收下次请求 global_buf 是野指针}// ✅ 对全局数据用 pemallocPHP_MINIT_FUNCTION(myext){global_bufpemalloc(1024,1);}// ❌ 错persistent HashTable 里存非持久 zend_string// ✅ 对persistent 容器里的数据也要用 persistent 分配---一句话 请求内的临时数据用 emalloc模块/进程级别的全局数据用 pemalloc混用必出野指针。