C語言關鍵字restrict

2021-09-24 20:34:59 字數 829 閱讀 5499

簡介

關鍵字restrict只用於限定指標;該關鍵字用於告知編譯器,所有修改該指標所指向內容的操作全部都是基於該指標的,即不存在其他進行修改操作的途徑;這樣的後果是幫助編譯器進行更好的優化,生成更有效率的彙編**。

**

例如

int i = 0;

int *a = &i;

int *b = &i;

這樣會存在乙個問題。

int foo(int *a,int *b)

如果a和b都指向同一資料,b會導致a=6,返回12。所以編譯器在做*a+b的時候,需要重新讀取a指向的資料。

foo:

movl $5,(%rdi) #儲存5到*a

movl $6,(%rsi) #儲存6到*b

movl (%rdi),%eax #重新讀取*a(因為有可能被上一行指令造成改變)

addl $6,%eax #加上6

ret

如果我們確保兩個指標不指向同一資料,就可以用restrict修飾指標型別

int foo(int *restrict a,int *restrict b)

編譯器就可以根據這個資訊,做出優化

foo 

movl $11,%eax #在編譯器已計算出11

movl $5,(%rdi) #儲存5到*a

movl $6,(%rsi) #儲存6到*b

ret

C語言的restrict關鍵字

restrict是c99標準引入的,它只可以用於限定和約束指標,並表明指標是訪問乙個資料物件的唯一且初始的方式.即它告訴編譯器,所有修改該指標所指向記憶體中內容的操作都必須通過該指標來修改,而不能通過其它途徑 其它變數或指標 來修改 這樣做的好處是,能幫助編譯器進行更好的優化 生成更有效率的彙編 由...

C語言關鍵字 restrict(一)

概念 restrict,c語言中的一種型別限定符 type qualifiers 用於告訴編譯器,物件已經被指標所引用,不能通過除該指標外所有其他直接或間接的方式修改該物件的內容。淵源 restrict是c99標準引入的,它只可以用於限定和約束指標,並表明指標是訪問乙個資料物件的唯一且初始的方式.即...

C語言中restrict關鍵字學習

簡介 restrict是 c99標準引入的,它只可以用於限定和約束 指標,並表明指標是訪問乙個 資料物件 的唯一且初始的方式.即它告訴 編譯器,所有修改該指標所指向記憶體中內容的操作都必須通過該指標來修改,而不能通過其它途徑 其它 變數或指標 來修改 這樣做的好處是,能幫助編譯器進行更好的優化 生成...