f給定一個沒有副作用的 (inline void-returning nullary) 函式:
inline void f() { /*...*/ }
是否可以撰寫一個g呼叫f但不會被實作優化的行內函式:
inline void g() { [[dont_optimize_this_away ???]] f(); }
有沒有辦法告訴編譯器“呼叫 f 并行內程式集,但不要優化這些指令”?
我認為在標準 C 20 中沒有辦法做到這一點。(或者有嗎?)
...但是是否有特定于平臺的方法可以x86-64使用gcc,clang和/或msvc?某種內在/編譯內置/屬性?
uj5u.com熱心網友回復:
根據這篇文章,您可以使用__attribute__((optimize("O0")))如下:
inline void __attribute__((optimize("O0"))) g() { [[dont_optimize_this_away ???]] f(); }
uj5u.com熱心網友回復:
也許這個?看看release的反匯編看起來它還在里面。(Windows 編譯指示:https ://docs.microsoft.com/en-us/cpp/preprocessor/optimize?view=msvc-170 )
inline void f() {
//std::cout << "I do a thing";
}
#pragma optimize( "", off )
inline void g() {
f();
}
#pragma optimize( "", on )
int main()
{
g();
}
uj5u.com熱心網友回復:
有一種方法。例如谷歌基準有benchmark::DoNotOptimize。
只需將其實作復制到您的代碼中,并將其應用于您的這個虛擬回圈的索引變數,for (int i = 0; i < 100; i );在問題下形成評論。
這是gcc 的技術解釋(注意它是舊源代碼,所以函式名稱不同)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496791.html
