1. 程式人生 > >高效程式設計---高效的 arm cortex m 的memset

高效程式設計---高效的 arm cortex m 的memset

查看了stm32工程裡的memset函式的反彙編程式碼,令人崩潰啊!!!

居然是一個位元組一個位元組地設定,這是什麼效率啊!!!

把stm32工程裡的memset函式的反彙編程式碼貼上:

這庫函式就是任性。簡單!粗暴!

現將自己想得,高效的memset的c程式碼呈上:

void memset_my(uint8_t *src, uint8_t value, uint32_t size_byte)

{

    uint32_t align_value;

    align_value = (uint32_t)src & 0x03;

    if(align_value)

    {

        align_value = 4 - align_value;

        if(size_byte > align_value)

        {

            while(align_value)

            {

                *(uint8_t *)src = value;

                src += 1;

                align_value -= 1;

                size_byte -= 1;

            }

        }

        else

        {

            while(size_byte)

            {

                *(uint8_t *)src = value;

                src += 1;

                size_byte -= 1;

            }

            return;

        }

    }

    align_value = value | (value << 8);

    align_value = align_value | (align_value << 16);

    while(size_byte >= 4)

    {

        *(uint32_t *)src = align_value;

        src += 4;

        size_byte -= 4;

    }

    while(size_byte)

    {

        *(uint8_t *)src = value;

        src += 1;

        size_byte -= 1;

    }

}

比stm32庫函式有4倍的效率提升。

更高效的memset函式肯定要用匯編編寫,要利用arm cortex m的載入特性。

彙編程式碼請關注微信公眾號:Jshong