作者applecool (noOneKnows)
看板C_and_CPP
標題[問題] 最佳化
時間Thu Feb 23 00:13:20 2012
請教大家
假設因為某需求,須在函數一開始執行一些程式碼,
在函數結束後執行 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
→ diabloevagto:你如果不想要temp被opt,可以用volatile 02/23 00:17
推 purpose:既然B是在stack建立的物件,自然是離開 run scope 才 dtor 02/23 00:22
→ purpose:打錯,既然 "temp" 02/23 00:23
→ diabloevagto:都沒用到,有可能會被opt掉吧 02/23 00:31
→ applecool:被最佳化掉整個結果會不一樣耶 02/24 21:35
→ diabloevagto:我說的最佳化是說如果都沒用到有可能拿掉,跟這個可 02/24 22:13
→ diabloevagto:能沒有關係 02/24 22:15
→ diabloevagto:沒用到的定義是說,compiler會有warning說unuse 02/24 22:15