[英]Disabling specific optimization(Dead code elimination) in gcc compiler
我想在C ++編譯中禁用死代碼消除優化。 有沒有一種方法可以通過保留所有其他-O優化來禁用此特定優化。 我嘗試使用-fnodce,但無法正常工作。
更新 (從評論中復制):我有類似
timer t;
t.start();
for(int i=1;i<=1000;++i)
object t;
t.stop();
我想測量對象t
構建時間,而對其不執行任何操作。 我不想通過創建1000個對象的數組來做到這一點。 有辦法解決嗎?
在構造的對象上添加“易失”限定符,這告訴編譯器假定構造存在副作用,因此阻止了對其進行優化。 那是:
timer t;
t.start();
for(int i=1;i<=1000;++i)
volatile object t;
t.stop();
好吧,如果您只是想測量對象的初始化時間,為什么要強迫編譯器避免DCE和諸如此類的事情,而不是僅僅以避免問題的方式編寫它?
object *arr = new object[100]; // allocate that outside the function and pass it into it
for (int i = 0; i < 100; i++) {
arr[i] = new object;
}
如果函數足夠大,可以避免內聯,那么就可以解決問題-否則,您可以導出函數並從另一個編譯模塊調用它,以避免不必要的優化。 簡單,沒有帶有某些編譯器標志的技巧,可能會帶來意想不到的后果,並且唯一的開銷就是數組存儲-如果可測量地影響您的時間,那么無論如何您都在測量錯誤的東西。
或者,如果您真的想要一些編譯器特定的標志-gcc具有noinline屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.