被memcpy坑了,咱也来求一次大神

q598162221 2013-04-18 11:18:40
memcpy的时间复杂度是N 不是1 大家千万要牢记啊.......千万别被骗了....
对10亿大小的数组进行memcpy 用时2280ms ...亲....这太令人蛋疼有 有没有更好的赋值办法
...全文
1702 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2013-04-19
  • 打赏
  • 举报
回复
受益匪浅呀。。。
q598162221 2013-04-18
  • 打赏
  • 举报
回复
引用 9 楼 FancyMouse 的回复:
居然会有人以为memcpy是O(1)的…… 都到了这个级别了,你需要做的是思考一下,算法上怎么避免这么大的拷贝。
memset 的算法复杂度是O(1); 然后就晕晕的一位memcpy是O(1);
Star-light 2013-04-18
  • 打赏
  • 举报
回复
开玩笑。。。 什么时候产生了copy内存只需要O(1)的错觉。。。
一叶之舟 2013-04-18
  • 打赏
  • 举报
回复
没有O(1)拷贝的算法,直接引用或用指针还差不多。
一叶之舟 2013-04-18
  • 打赏
  • 举报
回复
引用 9 楼 FancyMouse 的回复:
居然会有人以为memcpy是O(1)的…… 都到了这个级别了,你需要做的是思考一下,算法上怎么避免这么大的拷贝。
说的是,你应该避免这么大的拷贝.
FancyMouse 2013-04-18
  • 打赏
  • 举报
回复
居然会有人以为memcpy是O(1)的…… 都到了这个级别了,你需要做的是思考一下,算法上怎么避免这么大的拷贝。
ztenv 版主 2013-04-18
  • 打赏
  • 举报
回复
copy本来就很耗时间的,不copy也可能达到目的的吧?比如说增加引用。
q598162221 2013-04-18
  • 打赏
  • 举报
回复
引用 6 楼 lin5161678 的回复:
引用 2 楼 q598162221 的回复:引用 1 楼 lin5161678 的回复:没有 memcpy 目测已经是做到尽量快了 我直接写循环 用时3700ms memcpy 连一半的时间都没减掉....虽然我承认我那机器太烂了...本来企图操作这个数据量就得花这么长时间memcpy 已经尽力了 这个属于硬件限制吧 寄存器一次才能读写多少位数据是固……
所以现在只能剑走偏锋了.......不能在用这堂堂正正的数字拷贝解决问题了...此路不通
lin5161678 2013-04-18
  • 打赏
  • 举报
回复
引用 2 楼 q598162221 的回复:
引用 1 楼 lin5161678 的回复:没有 memcpy 目测已经是做到尽量快了 我直接写循环 用时3700ms memcpy 连一半的时间都没减掉....虽然我承认我那机器太烂了...
本来企图操作这个数据量就得花这么长时间memcpy 已经尽力了 这个属于硬件限制吧 寄存器一次才能读写多少位数据是固定的 你不能指望memcpy会魔法 唰一下全弄完 这不科学
q598162221 2013-04-18
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
lz怎么对10亿大小数组测试的,我这边运行几秒后崩溃了
创建100W的int 大小的数组 然后for 1000次..... 调用的时间基本可以忽略 因为我把100W改成10W时间就变成0ms了 这证明调用时间基本可以忽略不计
starytx 2013-04-18
  • 打赏
  • 举报
回复
lz怎么对10亿大小数组测试的,我这边运行几秒后崩溃了
逸萌 2013-04-18
  • 打赏
  • 举报
回复
当然和拷贝长度相关了o(n),每次拷贝总线长度,即使用DMA也这样啊
q598162221 2013-04-18
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
没有 memcpy 目测已经是做到尽量快了
我直接写循环 用时3700ms memcpy 连一半的时间都没减掉....虽然我承认我那机器太烂了...
lin5161678 2013-04-18
  • 打赏
  • 举报
回复
没有 memcpy 目测已经是做到尽量快了
赵4老师 2013-04-18
  • 打赏
  • 举报
回复
http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\memcpy.asm
rocktyt 2013-04-18
  • 打赏
  • 举报
回复
引用 17 楼 q598162221 的回复:
引用 16 楼 qq120848369 的回复:怪memcpy不如找自身问题了 想偷懒加上脑子糊涂了.. 是这么个问题 说有2个数组 unsigned int a[1-n]>0 unsigned int b[1-m]>0 然后有一个结果数组 c[n][m]={0}; 现在要做的是 for(int i=0;i!=n;i++) { if(a[……
你要写的内存是n^2的,这个没办法降低了吧
q598162221 2013-04-18
  • 打赏
  • 举报
回复
引用 16 楼 qq120848369 的回复:
怪memcpy不如找自身问题了
想偷懒加上脑子糊涂了.. 是这么个问题 说有2个数组 unsigned int a[1-n]>0 unsigned int b[1-m]>0 然后有一个结果数组 c[n][m]={0}; 现在要做的是 for(int i=0;i!=n;i++) { if(a[i]%2==0) int j=i; while(j!=m) { c[i][j]=b[j]; j++ } } 这个算法的时间复杂度是m*n; 当m==n时就是 n^2; 有没有办法改进这段代码 让他变成N 或者至多是 nlgn 如果没有...那就只能n^2了....
qq120848369 2013-04-18
  • 打赏
  • 举报
回复
怪memcpy不如找自身问题了
ForestDB 2013-04-18
  • 打赏
  • 举报
回复
有种优化叫copy on write
mLee79 2013-04-18
  • 打赏
  • 举报
回复
memset 也是O(N) 啊. 可能 用sse 优化下能快点.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧