php 中foreach比for快之原因
2024-09-04 12:41:06
这里首先要谈到php 的hashtable
typedef struct _hashtable {
uint nTableSize; // hash Bucket的大小,最小为8,以2x增长。
uint nTableMask; // nTableSize-1 , 索引取值的优化
uint nNumOfElements; // hash Bucket中当前存在的元素个数,count()函数会直接返回此值
ulong nNextFreeElement; // 下一个数字索引的位置
Bucket *pInternalPointer; // 当前遍历的指针(foreach比for快的原因之一)
Bucket *pListHead; // 存储数组头元素指针
Bucket *pListTail; // 存储数组尾元素指针
Bucket **arBuckets; // 存储hash数组
dtor_func_t pDestructor; // 在删除元素时执行的回调函数,用于资源的释放
zend_bool persistent; //指出了Bucket内存分配的方式。如果persisient为TRUE,则使用操作系统本身的内存分配函数为Bucket分配内存,否则使用PHP的内存分配函数。
unsigned char nApplyCount; // 标记当前hash Bucket被递归访问的次数(防止多次递归)
zend_bool bApplyProtection;// 标记当前hash桶允许不允许多次访问,不允许时,最多只能递归3次
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable; 未完待续...
最新文章
- TODO:macOS编译PHP7.1
- sed的应用
- 加载默认图片,如何避免img标签陷入onerror事件死循环
- ecshop常用二次开发修改
- Javascript调用ActiveX示例
- Android之获得内存剩余大小与总大小
- JavaEE Tutorials (23) - 资源适配器和契约
- 6.MIL采集和实时显示
- AngularJS的工作原理
- LeetCode OJ 84. Largest Rectangle in Histogram
- JavaScript 中有关Array操作的一些函数
- RAC某节点v$asm_disk查询hang分析处理
- Linux命令(精简版)
- EF Core 快速上手——创建应用的DbContext
- 配置私有SSH
- BZOJ1895Pku3580 supermemo——非旋转treap
- L1-055 谁是赢家
- 《网络对抗》Exp7 网络欺诈防范
- 【Android开发】之Fragment重要函数讲解
- java 项目 存入mysql后 变问号 MySql 5.6 (X64) 解压版 1067错误与编码问题的解决方案