- 主题:求教一个C++数组赋值的效率问题
比如有一个长度为200万的double数组D,给D[0]赋值的时候很快(估计不到1微秒),但是给D[1000000]赋值的时候明显变慢了,需要近1毫秒。为什么会有这种情况?如何优化呢?
谢谢!
又试了一下,发现并不完全是因为索引大所以耗时长,而是会跳变,具体请看我后面附的图
- 来自「最水木 for iPhone13,2」
※ 修改:·xueyandy 于 Aug 27 10:01:26 2021 修改本文·[FROM: 36.112.195.*]
※ 来源:·最水木 客户端·[FROM: 1.203.173.*]
修改:xueyandy FROM 36.112.195.*
FROM 1.203.173.*
double D[]=new double[2000000];
D[0]=0.0;//赋值很快,小于1微秒
D[1000000]=0.0;//赋值较慢,大于1毫秒
请指教!谢谢!
【 在 foliver 的大作中提到: 】
: 贴代码。
:
: 【 在 xueyandy 的大作中提到: 】
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 1.203.173.*
【 在 xueyandy 的大作中提到: 】
: 比如有一个长度为200万的double数组D,给D[0]赋值的时候很快(估计不到1微秒),但是给D[1000000]赋值的时候明显变慢了,需要近1毫秒。为什么会有这种情况?如何优化呢?
: 谢谢!
:
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.195.*





用clock_gettime
【 在 adu 的大作中提到: 】
: 你怎么测量的时间?
: 【 在 xueyandy 的大作中提到: 】
: : double D\[\]=new double\[2000000\];
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.195.*
【 在 foliver 的大作中提到: 】
: 贴代码。
:
: 【 在 xueyandy 的大作中提到: 】
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.195.*

好的,大概明白了,我再查查。谢谢你!
【 在 bihai 的大作中提到: 】
: 你想问的问题是为什么会有几个是接近毫秒吗?只要每次运行不是同一个位置,你看一下有多少个。大概是系统进行了调度,干别的去了。
:
: 【 在 xueyandy 的大作中提到: 】
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.195.*
好的,明白了,谢谢啦!
【 在 adu 的大作中提到: 】
: 兄弟 没你这么干的
:
: 你拿一把精度是一米的尺子量一毫米的东西,然后问为什么一会结果是0米,一会结果是1米?
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.195.*
了解了,您的回答很专业,非常感谢!
【 在 foliver 的大作中提到: 】
: 性能测试不是单条指令就打点测试,而是同样的指令运行很多次比如10万次,测试这10万次的总时间, 一般总时间至少要到几十毫秒。
:
: 具体如何设计测试代码,你可以在研究,但要防止编译器优化掉你的代码。
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.181.*
是的,手机打的,哈哈
【 在 z16166 的大作中提到: 】
: 觉得是优化问题,看汇编代码啊
:
: 上面不是有大佬提示放到godbolt上吗?那个网站是可以看生成的汇编的
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 36.112.181.*