分享一道360的C語言筆試題。x是一個行列均為1000的二維數組,下面代碼運行效率最高的是哪個?
二維數組大家都很熟悉,正常人遍歷二維數組都是一行一行來的,為什么很少有人按列去遍歷?
這道筆試題其實考察的就是遍歷效率的問題。
選項A,j是行,i是列,很顯然 x[i][j] 是按列訪問,先是第一列第一個元素,然后第一列第二個元素,以此類推。
選項B和選項C都存在按列訪問。
只有選項D,屬于正常的按行遍歷。
那么問題來了,為什么二維數組按行遍歷比按列遍歷來的快?
這個涉及的問題就太多了,得從CPU高速緩存講起。
CPU處理速度很快,但是訪問內存太慢,嚴重影響了機器運行效率。
于是就出現了高速緩存。
從名字應該能看出,訪問它速度確實快。
當CPU發出內存訪問請求時,會首先查看緩存內是否有請求的數據,如果有,直接返回,如果沒有,就要先把內存中的數據載入緩存,再把它返回給處理器。
由于緩存比內存貴很多,所以它的大小一般都以KB或者MB為單位,如果是一級緩存,那就更小了。
題目中的二維數組大小接近4M,CPU在訪問的時候,緩存先從內存抓取數據,而且一般都是抓取相鄰整個數據塊,簡單點理解,就是當前行以及后面的部分數據,這也符合內存訪問局部性特征。
如果二維數組按列遍歷,就需要不斷的抓取內存的數據,降低程序效率,這也將會失去緩存的意義。
審核編輯:劉清
-
處理器
+關注
關注
68文章
19265瀏覽量
229671 -
cpu
+關注
關注
68文章
10855瀏覽量
211605 -
C語言
+關注
關注
180文章
7604瀏覽量
136710
原文標題:為什么二維數組都是一行一行訪問?
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論