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