- 主题:访问数组元素, 直接指针还是下标访问有没有区别?
我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,
性能下降了20%不止.
前后两版接口都没变, 就是从指针访问变成了下标访问.
每个数组大概几十万个对象吧. 如果增加到上百万, 不知道会如何.
--
FROM 120.244.224.*
现代编译器开优化后两种写法完全等效
【 在 xieyf 的大作中提到: 】
: 我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,性能下降了20%不止.前后两版接口都没变, ...
--
FROM 118.113.3.*
你没开优化吧。
别说数组下标了,就是vector<>访问,对比数组访问,开优化之后其效率也是没有任何差别的。
【 在 xieyf ( meitian ) 的大作中提到: 】
: 标 题: 访问数组元素, 直接指针还是下标访问有没有区别?
: 发信站: 水木社区 (Thu Jan 21 06:32:25 2021), 站内
:
: 我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,
: 性能下降了20%不止.
:
: 前后两版接口都没变, 就是从指针访问变成了下标访问.
:
: 每个数组大概几十万个对象吧. 如果增加到上百万, 不知道会如何.
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 120.244.224.*]
--
FROM 76.126.252.*
你把这两个版本的代码编译之后,看看有什么变化吧。如果没有的话,可能是和MMA有关。
--
FROM 210.22.21.*
下标到内存地址也就一两条简单的指令而已,况且你用指针就不需要计算了吗
性能瓶颈应当不在下标,从别的地方找找问题
【 在 xieyf 的大作中提到: 】
: 我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,
: 性能下降了20%不止.
: 前后两版接口都没变, 就是从指针访问变成了下标访问.
: ...................
--
FROM 111.197.81.*
应该没啥影响,看看汇编指令找找差异吧
【 在 xieyf 的大作中提到: 】
: 我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,
: 性能下降了20%不止.
: 前后两版接口都没变, 就是从指针访问变成了下标访问.
: ...................
--
FROM 120.36.193.*
很久以前我也遇到过,原来是直接指针++,后者是索引++,然后再加基指针。
现在的编译器能优化掉吧?
【 在 xieyf 的大作中提到: 】
: 我一直以为影响很轻微, 没想到有一次将指针访问的程序改成下标访问后,
: 性能下降了20%不止.
: 前后两版接口都没变, 就是从指针访问变成了下标访问.
: ...................
--
FROM 106.37.195.*
在x86 上效率没区别。翻译成汇编都是基址+变址寻址。
【 在 ltqin 的大作中提到: 】
: 很久以前我也遇到过,原来是直接指针++,后者是索引++,然后再加基指针。
: 现在的编译器能优化掉吧?
--
FROM 120.244.156.*
我以前也是认为这样的,现实是我被打脸了,记忆深刻。
【 在 dormouseBHU 的大作中提到: 】
: 在x86 上效率没区别。翻译成汇编都是基址+变址寻址。
--
FROM 106.37.195.*
可能是别的原因。
【 在 ltqin ( s) 的大作中提到: 】
: 我以前也是认为这样的,现实是我被打脸了,记忆深刻。
--
FROM 118.192.134.*