- 主题:求教一个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.*
贴代码。
【 在 xueyandy 的大作中提到: 】
: 比如有一个长度为200万的double数组D,给D[0]赋值的时候很快(估计不到1微秒),但是给D[1000000]赋值的时候明显变慢了,需要近1毫秒。为什么会有这种情况?如何优化呢?
: 谢谢!
:
: ...................
--来自微水木3.5.11
--
FROM 140.206.195.*
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 的大作中提到: 】
: double D\[\]=new double\[2000000\];
:
: D\[0\]=0.0;//赋值很快,小于1微秒
:
: D\[1000000\]=0.0;//赋值较慢,大于1毫秒
:
: 请指教!谢谢!
:
: \- 来自「最水木 for iPhone13,2」
: --
发自「今日水木 on 鸿蒙」
--
FROM 73.93.166.*
放到godbolt上试一试
【 在 xueyandy (xueyandy) 的大作中提到: 】
: double D[]=new double[2000000];
: D[0]=0.0;//赋值很快,小于1微秒
: D[1000000]=0.0;//赋值较慢,大于1毫秒
: ...................
--
FROM 117.174.15.*
应该是 page fault
用 systemtap 监测可以确认
【 在 xueyandy 的大作中提到: 】
: 比如有一个长度为200万的double数组D,给D[0]赋值的时候很快(估计不到1微秒),但是给D[1000000]赋值 ...
--
FROM 178.55.185.*
page fault也不应该1毫秒这么慢啊,这是个数组,不需要从disk load什么东西,就是找块空闲内存map一下(就算加上清空内存操作)。
1毫秒可以干多少活啊。
怀疑楼主怎么测量的这个时间,测量误差估计很大。
【 在 philbloo 的大作中提到: 】
: 应该是 page fault
: 用 systemtap 监测可以确认
--
FROM 73.93.166.*
D[0]快应该,前面还有数组长度的记录,不但没有page fault而且大概率L1 cache命中。
但丘面的1ms有点过分了。
【 在 adu 的大作中提到: 】
:
: page fault也不应该1毫秒这么慢啊,这是个数组,不需要从disk load什么东西,就是找块空闲内存map一下(就算加上清空内存操作)。
: 1毫秒可以干多少活啊。
: 怀疑楼主怎么测量的这个时间,测量误差估计很大。
:
#发自zSMTH@Nokia 7 plus
--
FROM 120.244.224.*
涉及了内存分配了
【 在 xueyandy (xueyandy) 的大作中提到: 】
: 比如有一个长度为200万的double数组D,给D[0]赋值的时候很快(估计不到1微秒),但是给D[1000000]赋值的时候明显变慢了,需要近1毫秒。为什么会有这种情况?如何优化呢?
: 谢谢!
: - 来自「最水木 for iPhone13,2」
: ...................
--
FROM 27.91.71.*
为了找块连续空物理内存需要把其它进程的空间换出而已,你把在别的版闹的时间拿来看点书吧
【 在 adu (阿杜) 的大作中提到: 】
: page fault也不应该1毫秒这么慢啊,这是个数组,不需要从disk load什么东西,就是找块空闲内存map一下(就算加上清空内存操作)。
: 1毫秒可以干多少活啊。
: 怀疑楼主怎么测量的这个时间,测量误差估计很大。
: ...................
--
FROM 27.91.71.*