看板 C_and_CPP 關於我們 聯絡資訊
請問一維的指標存取 兩種存取方式會有什麼差異嗎 存取速度會不一樣嗎 int* arr = new int[10]; //---------------------------- for (int i=0; i<10; i++) cout << *(arr+i) << endl; //---------------------------- for (int i=0; i<10; i++) cout << arr[i] << endl; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.112.105 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472632682.A.DE7.html ※ 編輯: hunandy14 (140.127.112.105), 08/31/2016 16:40:22
uranusjr: 沒有, bracket notation 只是 syntax sugar 08/31 16:53
IhateOGC: 會有差異,硬體DMA光一個copy動作效能就差50% 08/31 19:34
IhateOGC: 純軟可能就沒差惹 08/31 19:35
wtchen: 請教樓上為啥會有差異?不懂....(沒最佳化的情形下) 08/31 19:39
uranusjr: 理論上用 pointer 要先加出結果才可以去 access, 然後 08/31 22:01
uranusjr: array index 可以直接跳, 所以後者是會比較快啦 08/31 22:01
uranusjr: 但 2016 年應該連單晶片 compiler 都沒有那麼蠢的了 08/31 22:01
ronin728: 編譯器會優化,沒差。沒開優化在大多編譯器上是有差的 09/01 02:47
ronin728: 印象中GCC開-O0會有差,但是Clang開-O0編譯出來是一樣的 09/01 02:48
yvb: 試過gcc和g++,版本4.6和3.3, 開-O0看objdump,結果都一樣. 09/02 16:22
lovejomi: 這case跟*(arr++) 效能一樣嗎 09/03 07:01
TobyH4cker: 這個問題是看指令集了吧 09/03 10:09
yvb: 版本4.6是x86_64, 版本3.3則是mips(be); 09/03 12:45
yvb: 又試 3.2 arm(be) 和 3.4 mips(le) 亦同. 09/03 12:46