[問題] 指標 直接存取與使用下標存取 差異

看板C_and_CPP作者 (Charlott.HonG)時間7年前 (2016/08/31 16:38), 7年前編輯推噓6(608)
留言14則, 7人參與, 最新討論串1/1
請問一維的指標存取 兩種存取方式會有什麼差異嗎 存取速度會不一樣嗎 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

08/31 16:53, , 1F
沒有, bracket notation 只是 syntax sugar
08/31 16:53, 1F

08/31 19:34, , 2F
會有差異,硬體DMA光一個copy動作效能就差50%
08/31 19:34, 2F

08/31 19:35, , 3F
純軟可能就沒差惹
08/31 19:35, 3F

08/31 19:39, , 4F
請教樓上為啥會有差異?不懂....(沒最佳化的情形下)
08/31 19:39, 4F

08/31 22:01, , 5F
理論上用 pointer 要先加出結果才可以去 access, 然後
08/31 22:01, 5F

08/31 22:01, , 6F
array index 可以直接跳, 所以後者是會比較快啦
08/31 22:01, 6F

08/31 22:01, , 7F
但 2016 年應該連單晶片 compiler 都沒有那麼蠢的了
08/31 22:01, 7F

09/01 02:47, , 8F
編譯器會優化,沒差。沒開優化在大多編譯器上是有差的
09/01 02:47, 8F

09/01 02:48, , 9F
印象中GCC開-O0會有差,但是Clang開-O0編譯出來是一樣的
09/01 02:48, 9F

09/02 16:22, , 10F
試過gcc和g++,版本4.6和3.3, 開-O0看objdump,結果都一樣.
09/02 16:22, 10F

09/03 07:01, , 11F
這case跟*(arr++) 效能一樣嗎
09/03 07:01, 11F

09/03 10:09, , 12F
這個問題是看指令集了吧
09/03 10:09, 12F

09/03 12:45, , 13F
版本4.6是x86_64, 版本3.3則是mips(be);
09/03 12:45, 13F

09/03 12:46, , 14F
又試 3.2 arm(be) 和 3.4 mips(le) 亦同.
09/03 12:46, 14F
文章代碼(AID): #1NnfTgtd (C_and_CPP)