DSP中記憶體申請耗時對比

2021-06-28 12:50:18 字數 717 閱讀 6331

最近在用dm6437做影象處理,裡面用到了鍊錶實現的堆疊操作,這就需要大量的記憶體申請、釋放,感覺這段函式有點耗時,所以就對dsp中片內、片外記憶體申請,不同的記憶體申請函式(malloc,mem_alloc,mem_calloc)耗時做了一下對比,測試是通過

dspbios提供的clock()函式得到,得出以下結論:

1. 在l1dsram比在ddr2申請記憶體快很多(乙個數量級以上)。

2. mem_alloc比mem_calloc快很多(乙個數量級以上),不需要把申請的記憶體清零時就不清零。

3. mem_alloc/mem_calloc申請記憶體是否對齊對速度無影響。

4. mem_alloc比malloc要慢一點(以前測試差幾倍,這次測試兩者時間差不多),但是mem_alloc與malloc+手動記憶體對齊相比時間相當。

5.測試發現在l1dram申請乙個陣列和在ddr2申請乙個陣列,然後對陣列中的數進行訪問、修改,耗時幾乎一樣,個人猜測應該是chche起了作用,把ddr2中的資料及時的搬到cache中,cpu到cache中訪問與到l1dram訪問的時間一樣,所以在l1dram訪問陣列的時間並沒有像期待的那樣會減少。

因為我要處理的影象大小是固定的,需要用到堆疊操作的影象又是其中的一小部分,所以我直接在記憶體中申請了一塊固定的足夠的記憶體(當做陣列),通過陣列實現的堆疊來處理,速度比原來快了1倍,但是這個結果感覺還不是太理想,後面再考慮一下是不是這段程式結構、編寫方式不好導致編譯器的優化效能沒有發揮出來。

外部函式中申請記憶體

在我們使用指標傳遞記憶體的時候,必須謹慎小心,否則常常會對非法記憶體 空位址 錯誤位址 進行操作。下面我們通過乙個程式來說明一些需要注意的問題。include include void test1 char p int num void test2 char pp int num void main...

外部函式中申請記憶體

在我們使用指標傳遞記憶體的時候,必須謹慎小心,否則常常會對非法記憶體 空位址 錯誤位址 進行操作。下面我們通過乙個程式來說明一些需要注意的問題。include include voidtest1 char p,intnum voidtest2 char pp,intnum voidmain 在上面的...

int與float在記憶體中的儲存形式 對比與轉換

看faac 中看到int與float的聯合體,看不懂 於是對這兩種資料型別的儲存方式做了一番了解 typedef union fi union faac aacquant.c 285行 int 長度 4位元組 以補碼形式存數資料,首位為符號位,資料的二進位制原碼,經過反碼 符號位不變 再加1得到資料...