作者hunandy14 (Charlott.HonG)
看板C_and_CPP
标题[问题] 指标 直接存取与使用下标存取 差异
时间Wed Aug 31 16:37:59 2016
请问一维的指标存取
两种存取方式会有什麽差异吗
存取速度会不一样吗
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1472632682.A.DE7.html
※ 编辑: hunandy14 (140.127.112.105), 08/31/2016 16:40:22
1F:→ uranusjr: 没有, bracket notation 只是 syntax sugar 08/31 16:53
2F:推 IhateOGC: 会有差异,硬体DMA光一个copy动作效能就差50% 08/31 19:34
3F:→ IhateOGC: 纯软可能就没差惹 08/31 19:35
4F:推 wtchen: 请教楼上为啥会有差异?不懂....(没最佳化的情形下) 08/31 19:39
5F:→ uranusjr: 理论上用 pointer 要先加出结果才可以去 access, 然後 08/31 22:01
6F:→ uranusjr: array index 可以直接跳, 所以後者是会比较快啦 08/31 22:01
7F:→ uranusjr: 但 2016 年应该连单晶片 compiler 都没有那麽蠢的了 08/31 22:01
8F:推 ronin728: 编译器会优化,没差。没开优化在大多编译器上是有差的 09/01 02:47
9F:→ ronin728: 印象中GCC开-O0会有差,但是Clang开-O0编译出来是一样的 09/01 02:48
10F:推 yvb: 试过gcc和g++,版本4.6和3.3, 开-O0看objdump,结果都一样. 09/02 16:22
11F:推 lovejomi: 这case跟*(arr++) 效能一样吗 09/03 07:01
12F:→ TobyH4cker: 这个问题是看指令集了吧 09/03 10:09
13F:推 yvb: 版本4.6是x86_64, 版本3.3则是mips(be); 09/03 12:45
14F:→ yvb: 又试 3.2 arm(be) 和 3.4 mips(le) 亦同. 09/03 12:46