先看下面的兩個(gè)函數(shù):
函數(shù)1
int array[10240][10240]; int func1() { int x,int y; for(x=0;x<10240;x++) { for(y=0;y<10240;y++) { array[x][y]=1234; } } }
函數(shù)2
intarray[10240][10240]; int func2() { int x,int y; for(x=0;x<10240;x++) { for(y=0;y<10240;y++) { array[y][x]=1234; } } }看出差異了嗎? 在STM32單片機(jī)中,上面的func1和func2函數(shù),哪個(gè)效率高?這是一個(gè)非常有趣的問題。我們知道,STM32單片機(jī)是一種嵌入式系統(tǒng),因此在編寫代碼時(shí),需要考慮到代碼的效率。
在這種情況下,我們需要比較兩個(gè)函數(shù)的效率,以確定哪個(gè)函數(shù)更適合在STM32單片機(jī)中使用。
函數(shù)的功能
首先,讓我們看一下這兩個(gè)函數(shù)的代碼。func1函數(shù)將數(shù)組array的所有元素設(shè)置為1234,而func2函數(shù)將數(shù)組array的所有元素設(shè)置為1234。這兩個(gè)函數(shù)的區(qū)別在于它們?nèi)绾伪闅v數(shù)組。func1函數(shù)按行遍歷數(shù)組,而func2函數(shù)按列遍歷數(shù)組。
效率比較
1、func1的效率
讓我們首先來(lái)看看 func1。在 func1 中,我們使用兩個(gè)嵌套的循環(huán)按行順序訪問數(shù)組元素。這意味著我們首先遍歷數(shù)組的第一行,然后是第二行,以此類推。這種訪問模式有助于數(shù)據(jù)局部性,因?yàn)樗沟眠B續(xù)內(nèi)存地址中的數(shù)據(jù)可以在緩存中更容易獲取。當(dāng)處理大型數(shù)組時(shí),這種連續(xù)性可以顯著提高性能。
2、func2的效率
與此相反,func2 使用兩個(gè)嵌套的循環(huán)按列順序訪問數(shù)組元素。這意味著我們首先遍歷數(shù)組的第一列,然后是第二列,以此類推。這種訪問模式會(huì)導(dǎo)致不連續(xù)的內(nèi)存訪問,因?yàn)閿?shù)組的不同列不一定存儲(chǔ)在相鄰的內(nèi)存位置上。這可能導(dǎo)致較低的效率,因?yàn)椴贿B續(xù)的內(nèi)存訪問通常會(huì)導(dǎo)致較長(zhǎng)的內(nèi)存訪問延遲。
接下來(lái)我們來(lái)探討一下二維數(shù)組按行訪問比按列訪問效率更高的原因。在計(jì)算機(jī)科學(xué)中,二維數(shù)組可以按行或按列存儲(chǔ)。在C語(yǔ)言中,二維數(shù)組是按行存儲(chǔ)的。這意味著,如果您要訪問二維數(shù)組中的元素,按行訪問比按列訪問更快。
這是因?yàn)橛?jì)算機(jī)內(nèi)存是按照地址順序存儲(chǔ)的。當(dāng)您訪問一個(gè)內(nèi)存地址時(shí),計(jì)算機(jī)會(huì)將該地址附近的內(nèi)存地址預(yù)先加載到緩存中。這是因?yàn)?,如果您正在訪問一個(gè)內(nèi)存地址,那么您很可能會(huì)在不久的將來(lái)訪問該地址附近的內(nèi)存地址。因此,預(yù)先加載這些地址可以提高程序的性能。
當(dāng)您按行訪問二維數(shù)組時(shí),您會(huì)按順序訪問內(nèi)存地址。這意味著,計(jì)算機(jī)可以預(yù)先加載與您正在訪問的內(nèi)存地址相鄰的內(nèi)存地址。這樣,當(dāng)您訪問下一個(gè)內(nèi)存地址時(shí),它已經(jīng)在緩存中了。這使得按行訪問二維數(shù)組比按列訪問二維數(shù)組更快。
總之,按行訪問二維數(shù)組比按列訪問二維數(shù)組更快,因?yàn)樗昧擞?jì)算機(jī)內(nèi)存的物理結(jié)構(gòu)。
審核編輯:劉清
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3606瀏覽量
129595 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7609瀏覽量
137219 -
STM32單片機(jī)
+關(guān)注
關(guān)注
59文章
549瀏覽量
58749
原文標(biāo)題:用兩個(gè)函數(shù)講解一下STM32中二維數(shù)組“按行訪問”與“按列訪問”的差異!
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式,微信公眾號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論