[問題] 最佳化

看板C_and_CPP作者 (noOneKnows)時間14年前 (2012/02/23 00:13), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
請教大家 假設因為某需求,須在函數一開始執行一些程式碼, 在函數結束後執行 inverse 的程式碼。 舉簡單例子(大概的程式碼,沒編譯,語法可能錯) class A { public: static int x; class B { public: static int &x; // 假設在 cpp 已經把他變成 A::x 的引用了。 B() { ++x; } ~B() { --x; } }; int run { B temp; 接下來進行許多與 x 有關的計算,可能會,也可能不會改變 x 的值。 但絕對不會寫到關於 B temp 的程式碼。 return x; } }; 因為我是想讓解構的時候去執行 inverse 的動作, 但只能在函數return已經結束後執行。 想請問有沒有可能哪個編譯器 會因為中間運算沒有寫到 B temp 而去把 B temp 提前 release 或根本不產生嗎? 手邊編譯器實驗過是不會。 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.136.52

02/23 00:17, , 1F
你如果不想要temp被opt,可以用volatile
02/23 00:17, 1F

02/23 00:22, , 2F
既然B是在stack建立的物件,自然是離開 run scope 才 dtor
02/23 00:22, 2F

02/23 00:23, , 3F
打錯,既然 "temp"
02/23 00:23, 3F

02/23 00:31, , 4F
都沒用到,有可能會被opt掉吧
02/23 00:31, 4F

02/24 21:35, , 5F
被最佳化掉整個結果會不一樣耶
02/24 21:35, 5F

02/24 22:13, , 6F
我說的最佳化是說如果都沒用到有可能拿掉,跟這個可
02/24 22:13, 6F

02/24 22:15, , 7F
能沒有關係
02/24 22:15, 7F

02/24 22:15, , 8F
沒用到的定義是說,compiler會有warning說unuse
02/24 22:15, 8F
文章代碼(AID): #1FHHGZhm (C_and_CPP)