原始碼分析foreach效率比for迴圈高

2021-07-22 22:02:59 字數 572 閱讀 3407

首先看看php原始碼變數值儲存:

typedef union _zvalue_value  str;

hashtable *ht; /* hash table value */

zend_object_value obj;

} zvalue_value;

php陣列的值儲存在zvalue_value.ht裡面,它是乙個hashtable。hashtable的特點:

所以$array['key']這樣子獲取資料,就會需要做一次hash才會知道bucket的位置,才能拿到值。

typedef struct _bucket

bucket;

typedef struct _hashtable

hashtable;

hashtable的資料結構,通過這段原始碼可以看出來,如果是foreach的話,可以直接通過bucket.next獲取到下乙個值,而如果是for迴圈則需要做一次hash才能知道bucket的位址,所以foreach比for迴圈效率更高一些。

java為什麼 foreach比for效率高

1 for是使用下標 偏移量 定位的.2 foreach應該是使用類似迴圈子的機構 3 對隨機訪問效率高的arraylist.使用下標訪問效率本身很高.foreach內部的迴圈子直接封裝下標,自己實現的for比foreach更直接,效率稍高些,但差別不會太大,仍然在乙個數量級上。4 如果使用插入和刪...

memset 的效率以及原始碼分析

void memset void s,int ch,size t n 作用 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作。不知道有沒有像我一樣把memset當作萬能的初始化工具,例如 int arr ...

memset 的效率以及原始碼分析

void memset void s,int ch,size t n 作用 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作。不知道有沒有像我一樣把memset當作萬能的初始化工具,例如 int arr ...