This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
blog:2025-07-02-002 [2025/07/02 16:31] jethro |
blog:2025-07-02-002 [2025/07/02 16:31] (current) jethro |
||
---|---|---|---|
Line 2: | Line 2: | ||
====== 2025-07-02 C/C++ restrict ====== | ====== 2025-07-02 C/C++ restrict ====== | ||
* restrict是C99 標準引入的一個關鍵字,用於修飾指針,告訴編譯器該指針是存取其指向記憶體的唯一且初始的方式。 這意味著,在該指標的生命週期內,對該指標所指向記憶體的修改只能透過該指標本身或由該指標派生出的指標進行,不能透過其他指標或變數來存取和修改。 | * restrict是C99 標準引入的一個關鍵字,用於修飾指針,告訴編譯器該指針是存取其指向記憶體的唯一且初始的方式。 這意味著,在該指標的生命週期內,對該指標所指向記憶體的修改只能透過該指標本身或由該指標派生出的指標進行,不能透過其他指標或變數來存取和修改。 | ||
- | 詳細解說: | ||
- | ==== 作用 ===== | ||
* restrict主要用於幫助編譯器進行最佳化。 當編譯器知道某個指標是訪問其所指向記憶體的唯一途徑時,它可以放心地進行一些最佳化,例如消除冗餘的記憶體訪問,產生更有效率的機器碼。 | * restrict主要用於幫助編譯器進行最佳化。 當編譯器知道某個指標是訪問其所指向記憶體的唯一途徑時,它可以放心地進行一些最佳化,例如消除冗餘的記憶體訪問,產生更有效率的機器碼。 | ||
- | * 使用場景: | + | ===== 使用場景 ===== |
- | * 當需要對效能有較高要求的程式碼進行最佳化時,可以考慮使用restrict。 | + | * 當需要對效能有較高要求的程式碼進行最佳化時,可以考慮使用restrict。 |
- | * 當明確知道兩個指標不會指向同一塊記憶體區域時,可以使用restrict來提高程式碼的效率。 | + | * 當明確知道兩個指標不會指向同一塊記憶體區域時,可以使用restrict來提高程式碼的效率。 |
===== 範例 ===== | ===== 範例 ===== | ||
* <sxh c> void add_and_multiply(int *restrict ptr1, int *restrict ptr2, int val) { | * <sxh c> void add_and_multiply(int *restrict ptr1, int *restrict ptr2, int val) { |