→ shadow0326: inline拿掉,或variable改static 02/23 14:31
inline有沒有拿掉感覺影響不大
在VC2013下
debug mode : 有inline比沒有慢2~3% (感覺就誤差範圍內)
relase mode : 有inline比沒有快5%
但是const array有沒有拉出去
debug mode : 拉出去比沒拉快2.42倍
release mode : 拉出去比沒拉快2.75倍
感覺不像是inline在作怪
※ 編輯: ofd168 (60.250.205.229), 02/23/2017 14:44:41
推 shadow0326: 唔 我以為這種const array會在編譯期就做掉 02/23 15:31
→ shadow0326: 不然可以用constexpr試試看 02/23 15:32
難過了
vc2013不支援 constexpr
※ 編輯: ofd168 (60.250.205.229), 02/23/2017 16:06:56
推 ilms49898723: 讓那兩個陣列變static 02/23 16:09
推 Zephyr750: 變慢的原因,是建構的過程吧?宣告陣列的時候要記憶體 02/23 16:31
→ Zephyr750: 規劃 02/23 16:31
在function內加上static的確速度就回來了
我以為寫const,呼叫function不會另外要記憶體
這樣不就有沒有const都會差不多@@?
這樣是說,只要const array前面都要加上static以增加速度@@?
一般一個值的const也需要加嗎?
→ hichcock: 你這個 function 被執行幾次? 02/23 16:57
基本上超級多次,應該是其他funtion的數十倍以上
※ 編輯: ofd168 (60.250.205.229), 02/23/2017 18:35:31
剛剛改了其他function,把所有const array加上static
速度好像沒差
看來是呼叫的次數不夠多次?
※ 編輯: ofd168 (60.250.205.229), 02/23/2017 18:46:33
推 yvb: 試問 table()中, 寫一句 *((double *)table1) = *table1 + 1; 02/23 18:45
→ yvb: 可不可以? 若可以, 呼叫 table() 十次後, *table1 會是多少? 02/23 18:46
→ yvb: 試試看寫在 function 內和 function 外的差別. 02/23 18:47
→ yvb: 上一句是指 const array. 02/23 18:54
table1[0]會比原本多1
看起來的確是每次進去都會要一塊空間,把值複製進去......
→ yvb: const array 加上 static 也可以再試試看. 02/23 18:58
寫入會發生違規
推 kokal: non-variable放在stack, static variable跟global放在同區 02/23 19:01
→ kokal: 所以每進function一次,就建立一次array然後再消滅 02/23 19:02
看起來的確是
所以寫const只不過是告訴compiler不可以更改,可是實際上行為跟一般array一樣
都是需要要空間 -> initialize........
天啊,我一直以為他是當成程式碼放在一起耶...... (不知道哪裡來的觀念)
另外,想問是否該加上inline/改成macro呢?
※ 編輯: ofd168 (60.250.205.229), 02/23/2017 19:14:59
→ kokal: inline建議complier展開省去branch, macro是compiler在 02/23 21:07
→ kokal: front end階段去替換內容 02/23 21:07
→ kokal: 不太清楚你想要做甚麼 02/23 21:10
單純想說這個程式碼超級短,基本上就把兩個ARRAY串起來,用inline或macro會不會比較快XDDD
畢竟這個function會被呼叫超多次
※ 編輯: ofd168 (123.195.57.89), 02/23/2017 22:45:12
→ kokal: macro不影響,macro只是在compile code前就字替換掉 02/24 01:14
→ kokal: 但是inline要看compiler是否打算把code展開省去jump 02/24 01:15
→ kokal: 我覺得既然是const array就直接合併,對index操作就好啦 02/24 01:24
推 jackyhuang: 用 nm 看 symbol table, 你就會知道差異在哪了 02/25 02:04
推 yvb: 真沒試過用 nm 看 VC2013 編譯出來的程式... 可行嗎? 02/25 14:23
推 jackyhuang: 可能不行,不過 ms 上也有類似的 dumpbin.exe 02/26 04:21
→ uranusjr: 我覺得你只是單純踩到 VC++ 的 bug 了 XDDD 02/26 23:26
→ uranusjr: 了 const 反而會讓 VC++ 做錯事的例子 02/26 23:27
推 LPH66: 那個微軟 bug tracker 裡回文的 Geoff 的論點簡直奇文共賞 02/27 06:33
→ LPH66: compiler 也是程式, 做錯事就得修, 哪有一定要繞過的道理.. 02/27 06:35
→ LPH66: 移掉三個 const 可以省掉 900K 程式各種意味上都是神奇 02/27 06:36
推 friends29: 在function外面寫array 指標傳進去加const也可以呀 要 02/27 06:39
→ friends29: 考慮速度的話重複執行很多次的部分盡量不要包含memory 02/27 06:39
→ friends29: allocation deallocation 你可以寫一個迴圈 new delet 02/27 06:39
→ friends29: e 很多次抓個時間就知道了 02/27 06:39
推 kokal: @uranusjr 原po的不能算是bug,根據 goo.gl/92JB2Z ,const並 02/28 00:17
→ kokal: 非指定variable放哪的specifier 02/28 00:18
→ kokal: 只要符合immutable, const也可以放在stack 02/28 00:26
→ ofd168: XD 原來後面大大們還有討論這麼多 04/21 00:58