<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在STM32中的func1和func2函數,哪個效率高?

玩轉單片機與嵌入式 ? 來源:玩轉單片機與嵌入式 ? 2023-11-08 09:20 ? 次閱讀

先看下面的兩個函數:

函數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;
        }
    }
}

函數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單片機中,上面的func1和func2函數,哪個效率高?這是一個非常有趣的問題。我們知道,STM32單片機是一種嵌入式系統,因此在編寫代碼時,需要考慮到代碼的效率。

在這種情況下,我們需要比較兩個函數的效率,以確定哪個函數更適合在STM32單片機中使用。

函數的功能

首先,讓我們看一下這兩個函數的代碼。func1函數將數組array的所有元素設置為1234,而func2函數將數組array的所有元素設置為1234。這兩個函數的區別在于它們如何遍歷數組。func1函數按行遍歷數組,而func2函數按列遍歷數組。

效率比較

1、func1的效率

讓我們首先來看看 func1。在 func1 中,我們使用兩個嵌套的循環按行順序訪問數組元素。這意味著我們首先遍歷數組的第一行,然后是第二行,以此類推。這種訪問模式有助于數據局部性,因為它使得連續內存地址中的數據可以在緩存中更容易獲取。當處理大型數組時,這種連續性可以顯著提高性能。

2、func2的效率

與此相反,func2 使用兩個嵌套的循環按列順序訪問數組元素。這意味著我們首先遍歷數組的第一列,然后是第二列,以此類推。這種訪問模式會導致不連續的內存訪問,因為數組的不同列不一定存儲在相鄰的內存位置上。這可能導致較低的效率,因為不連續的內存訪問通常會導致較長的內存訪問延遲。

接下來我們來探討一下二維數組按行訪問比按列訪問效率更高的原因。在計算機科學中,二維數組可以按行或按列存儲。在C語言中,二維數組是按行存儲的。這意味著,如果您要訪問二維數組中的元素,按行訪問比按列訪問更快。

這是因為計算機內存是按照地址順序存儲的。當您訪問一個內存地址時,計算機會將該地址附近的內存地址預先加載到緩存中。這是因為,如果您正在訪問一個內存地址,那么您很可能會在不久的將來訪問該地址附近的內存地址。因此,預先加載這些地址可以提高程序的性能。

當您按行訪問二維數組時,您會按順序訪問內存地址。這意味著,計算機可以預先加載與您正在訪問的內存地址相鄰的內存地址。這樣,當您訪問下一個內存地址時,它已經在緩存中了。這使得按行訪問二維數組比按列訪問二維數組更快。

總之,按行訪問二維數組比按列訪問二維數組更快,因為它利用了計算機內存的物理結構。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統
    +關注

    關注

    40

    文章

    3444

    瀏覽量

    128383
  • C語言
    +關注

    關注

    180

    文章

    7542

    瀏覽量

    131042
  • STM32單片機
    +關注

    關注

    58

    文章

    545

    瀏覽量

    58044

原文標題:用兩個函數講解一下STM32中二維數組“按行訪問”與“按列訪問”的差異!

文章出處:【微信號:玩轉單片機與嵌入式,微信公眾號:玩轉單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C++中非常有用的設計模式

    假設我們在開發一個SDK,或者設計某個模塊,需要暴露出去一個MyClass.h頭文件,并向用戶提供func1func2兩個功能。
    的頭像 發表于 02-21 14:21 ?739次閱讀

    公式節點的效率高嗎?

    如題,完成一個功能, 公式節點效率高,還是用VI函數效率高? 相信labview是用C++寫的程序.
    發表于 11-20 11:30

    關于主函數whil循環調用多個函數執行,和直接代碼執行,哪個效率高的問題。

    函數while多段代碼,是將代碼封裝成多個函數,去調用多個函數執行,還是直接貼代碼函數w
    發表于 06-24 10:14

    用keil 編寫STC單片機程序,用人使用過__func__宏嗎?

    使用keil version5編寫STM32程序可以使用__func__宏,寫STC程序的時候也想用一下__func__,提示__func
    發表于 12-01 21:41

    真心請教,a=b=1和a=1;b=1;這兩種寫法c語言中執行起來哪個效率高?

    小白我真心請教,a=b=1和a=1;b=1;這兩種寫法c語言中執行起來哪個效率高?求高手們賜教
    發表于 01-01 12:30

    Autosar Apply Func Safe to ECu

    Autosar Apply Func Safe to ECu
    發表于 01-25 10:17

    超聲波測距-AVR程序代碼

    // Func7=In Func6=In Func5=In Func4=In Func3=In Fu
    發表于 06-26 02:47

    將結構緩沖區指針轉換為struct不起作用?

    );}調試時,一切看起來都很好,但是當我進入函數2時,程序跳轉到StuttuppPoSoC63YMCMPLUS S的故障處理程序。有沒有人理解這為什么不起作用? 以上來自于百度翻
    發表于 09-28 15:39

    如何寫UCOSII才能保護全局變量?

    全局變量 global_var1,不允許寫全局變量 global_var1 func2(); //任務退出臨界區 func3(); delay();}}中斷
    發表于 09-12 04:35

    c語言初始化變量

    給了應用程序零頁。接下來func1將其賦值12345之后函數返回,接下來調用func2的時候,
    發表于 03-29 09:25

    ARMv8架構棧的布局簡析

    棧的布局函數調用棧由連續的棧幀組成。每個棧幀記錄一個函數調用的信息,這些信息包括函數參數,函數變量,函數運行地址。假設
    發表于 05-13 11:17

    LS1028A兩塊板之間如何通過PCIe進行SoC到SoC通信?

    /vendorid sudo echo 2 > functions/pci_epf_test/func1/msi_interrupts root@TinyLinux:/sys/kernel
    發表于 05-06 08:33

    為什么不能在esp8266 sdk_v1.4.0使用PIN_FUNC_SELECT宏?

    。我像這樣調用這個宏 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); 我是說錯了還是這是 sdk 的錯誤。 如果我不能使用
    發表于 06-12 07:39

    請問s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;是函數調用嗎?

    在看新唐IIC例程時,這行不明白什么意思,特請教一下,這是函數調用嗎? s_I2C0HandlerFn = (I2C_FUNC)I2C_MasterTx;怎么不用寫參數嗎? /* I
    發表于 06-25 07:18

    從裸奔到操作系統,我們將面對什么挑戰

    在超級循環中,分別調用了func1~func5這5個函數,他們的棧需求分別是10K、5K、9K、8K、9K。調用func1時,系統分配10K的ram作為棧,
    的頭像 發表于 07-16 14:13 ?4515次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>