定義
restrict關鍵字是在c99標準中新增的,用於限定和約束指標。
規則
它告訴編譯
器,所有修改該指標所指向記憶體中內容的操作,全都必須基於該指標;不存在其它進行修改操作的途徑(通過其它變數或指標)。
優點
能幫助編譯器進行更好的優化**,生成更有效率的彙編**。
測試
int test_restrict(int* x, int* y)
很顯然,在x與y不相同的情況下,test_restrict()函式的返回值是0。只有在很偶然的情況下,x==y時,結果是1。
然而編譯器必須保證生成100%正確的**,因此,編譯器不能將原有**替換成下面的更優版本的**:
int test_restrict(int* x, int* y)
在這裡使用restrict:
int test_restrict(int* restrict x, int* restrict y)
由於使用restrict關鍵字來修飾引數x了,所以,指標x是修改指標x所指向記憶體中內容的唯一途徑,編譯器可以確認"*y = 1;"這行**絕對不會修改*x的內容,因此,編譯器可以安全地把**優化為:
int test_restrict(int* restrict x, int* restrict y)
使用注意
關鍵字restrict是c99標準中新增加的關鍵字,c++目前仍未引入;編譯時,可通過在gcc的命令列使用引數"-std=c99"來開啟對c99標準的支援。
在cpp檔案中,編譯會報錯,只能使用在c檔案中。
參考文章:
restrict關鍵字用法
概括的說,關鍵字restrict只用於限定指標 該關鍵字用於告知編譯器,所有修改該指標所指向內容的操作全部都是基於 base on 該指標的,即不存在其它進行修改操作的途徑 這樣的後果是幫助編譯器進行更好的 優化,生成更有效率的彙編 舉個簡單的例子 int foo int x,int y 很顯然函式...
restrict關鍵字用法
c99中新增加了乙個型別定義,就是restrict。看了下網上的相關貼子,但還是問題解決的不夠。下面是相關乙個文章,我將在後面再加相關說明 那麼restrict的意義是什麼呢?概括的說,關鍵字restrict只用於限定指標 該關鍵字用於告知編譯器,所有修改該指標所指向內容的操作全部都是基於 base...
關鍵字restrict簡介
本文摘自 restrict 是c99引入的新關鍵字,它用於 宣告只會通過該指針對其指向的記憶體空間進行讀寫操作,以便編譯器能進行更好的優化。我們來看乙個跟memcpy memmove類似的問題。下面的函式將兩個陣列中對應的元素相加,結果儲存在第三個陣列中。void vector add const ...