3
__declspec(restrict)和__declspec(noalias)之間有什麼不同 我已閱讀此頁https://msdn.microsoft.com/en-us/library/k649tyc7.aspx。但不清楚它是什麼。有人可以解釋這兩個註釋解決了什麼問題。__declspec(restrict)和__declspec(noalias)之間有什麼不同
__declspec(restrict)和__declspec(noalias)之間有什麼不同 我已閱讀此頁https://msdn.microsoft.com/en-us/library/k649tyc7.aspx。但不清楚它是什麼。有人可以解釋這兩個註釋解決了什麼問題。__declspec(restrict)和__declspec(noalias)之間有什麼不同
__declspec(restrict)
聲明函數的返回值指向不是別名的內存。也就是說,函數返回的內存保證不能通過程序中的其他指針訪問。
__declspec(noalias)
聲明該函數不會修改函數的參數的第一級間接尋址以外的內存。也就是說,這些參數是功能所具有的外部世界的唯一參考。
這些都不能解決任何問題 - 它們只是編譯器的性能提示。通常情況下,編譯器需要確保緩存寄存器中的中間結果或重新排序代碼的內容不會受到函數調用上潛在別名的影響;這些聲明是您作爲程序員的保證,編譯器在編譯這些特定函數時不需要擔心這一點。
重要的是,這些註釋不是可移植的,所以它們不應該用於任何可能需要由MSVC以外的東西編譯的代碼。 – Anthony 2015-02-24 06:30:54