天天看點

DSP平台優化執行個體:如果可以盡量加上const、restrict等類型修飾詞

如果一個函數被頻繁地調用很多很多次的時候,我們就應該從細節入手。有時候我們對代碼本身的邏輯無從下手,往往這些細節能夠帶給我們意想不到的結果。類型修飾符就是其中之一。

const

關鍵詞無需多說,但是我們往往也能忽視,是以盡量養成一個習慣:在設計一個函數參數或者申明一個變量(無論是局部的還是全局的)的時候,下意識地考慮一下這個變量我們可不可以設計為不可更改的。

NOTE: 如果是指針的話,我們還應該考慮是指針指向的内容不可更改(應該申明為

const int *p

),還是指針本身不可修改(應該申明為

int * const p

),或者二者均不可修改(應該申明為

const int * const p

)。

restrict

關鍵詞,我在開始DSP平台優化之前從來沒有接觸過的,但是在最近的學習和優化過程中,它卻好幾次帶給我意想不到的結果。

restrict,C語言中的一種類型限定符(Type Qualifiers),用于告訴編譯器,對象已經被指針所引用,不能通過除該指針外所有其他直接或間接的方式修改該對象的内容。——百度百科

類型修飾符的作用就是告訴編譯器更多的關于變量的資訊,這樣編譯器在做優化的時候就更能放開手腳,大膽地優化了,因為編譯器總是會選擇最安全的優化方案。但是,有時候我們也會看到,即使添加了這些類型修飾符但是效果卻不明顯,其實就是編譯器已經替我們做了這件事。

繼續閱讀