执行直接指针操作还是 [] 更好
Is it better to perform direct pointer operations or []
我有一个二维数组。我需要尽快对它执行一些操作(函数每秒将调用十几次,所以让它高效会很好)。
现在,假设我想得到元素A[i][j]
,简单地使用 A[i][j]
和 *(A+(i*width+j))
在速度上有什么区别(忽略我需要计算 i*width+j 的事实,假设我已经有了这个值)?
启用所有优化后,应该没有区别 - 不仅在计时上,而且在编译器为这两个构造生成的代码上。
从程序员的角度来看,最大的区别是可读性。第一个结构立即告诉读者他正在处理一个 2D 数组,而第二个结构需要一些思考(是行主序还是列主序?width
在哪里计算?选择这种方式而不是更明显的 2D 数组语法的原因是什么?这就是为什么第一个结构在现实生活中更可取的原因。
根据编译器的质量,我认为[]
符号可以产生更快的代码。原因是,当您使用指针时,编译器无法确定指针别名未发生,这可能会排除某些优化。
另一方面,如果使用[]
表示法,则这些问题不适用,编译器可能会更积极地应用优化。
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 在C 中操作数据的更好方法是什么
- 执行直接指针操作还是 [] 更好
- 在 C++ 中执行此操作的视觉更好方法?标准::字符串
- float4::set_wxy(以及其他set-swizzle操作)的更好的SSE2实现
- 字符串操作-需要更好的方式