关于二维数组的复制问题

左老师的小迷弟 2013-05-02 05:38:27
比如我有两个非常大的数组,A[MAX][MAX],B[MAX][MAX],我想把A数组的a到b行,c到d列,赋值给B数组的e到f行,g到h列,怎么操作啊:就用memcpy单纯的一行一行赋值?那样很慢啊
...全文
215 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
baichi4141 2013-05-06
  • 打赏
  • 举报
回复
不管是不是连续的内存空间,内存数据复制就是单纯的一个字节一个字节复制,memcpy的源码经过长时间测试优化,做到了平均性能最好,仅此而已,它本质上就是个while循环,跟你写的for循环没有区别,除了你写的效率略低 一条复制100字节的memcpy语句很快,十条复制10字节的memcpy语句很慢?我再问一句,你觉得代码是快是慢,就靠你肉眼看代码行数吗?
baichi4141 2013-05-06
  • 打赏
  • 举报
回复
引用 5 楼 imucaoyue 的回复:
谢谢您的回复 但是 您没有理解我的意思 我的意思是多行多列的时候只有某一行地址是连续的 那么需要多个for语句调用memcpy,这样依然很慢
你觉得很慢的理由就是for语句很多吧?看语句数估计程序效率? 别再想当然了,没有比memcpy更快的方法。多行复制,你自己写的for循环比memcpy里面的while循环效率略低,仅此而已
  • 打赏
  • 举报
回复
引用 10 楼 baichi4141 的回复:
[quote=引用 9 楼 imucaoyue 的回复:] 谢谢您一直回答我的问题 您是对我有误解的 我做的图像处理 图像值很多很大,我是写好了代码,发现很慢,一个循环一次要一分钟,总共有100多个循环,不可能让一个程序跑一下午才出结果吧!问大家有没有优化的办法,用的就是memcpy
一个循环一次要一分钟?你这什么图像?什么处理算法? 总之,只是单纯的复制数据,没有比循环memcpy更快的方法,如果你这图像一个循环就要一分钟,那我觉得你还是多想想memcpy之外的地方是怎么回事吧。[/quote]给留个邮箱号吧!!!跪谢!!!QQ号码最好!
baichi4141 2013-05-06
  • 打赏
  • 举报
回复
引用 9 楼 imucaoyue 的回复:
谢谢您一直回答我的问题 您是对我有误解的 我做的图像处理 图像值很多很大,我是写好了代码,发现很慢,一个循环一次要一分钟,总共有100多个循环,不可能让一个程序跑一下午才出结果吧!问大家有没有优化的办法,用的就是memcpy
一个循环一次要一分钟?你这什么图像?什么处理算法? 总之,只是单纯的复制数据,没有比循环memcpy更快的方法,如果你这图像一个循环就要一分钟,那我觉得你还是多想想memcpy之外的地方是怎么回事吧。
  • 打赏
  • 举报
回复
引用 8 楼 baichi4141 的回复:
不管是不是连续的内存空间,内存数据复制就是单纯的一个字节一个字节复制,memcpy的源码经过长时间测试优化,做到了平均性能最好,仅此而已,它本质上就是个while循环,跟你写的for循环没有区别,除了你写的效率略低 一条复制100字节的memcpy语句很快,十条复制10字节的memcpy语句很慢?我再问一句,你觉得代码是快是慢,就靠你肉眼看代码行数吗?
谢谢您一直回答我的问题 您是对我有误解的 我做的图像处理 图像值很多很大,我是写好了代码,发现很慢,一个循环一次要一分钟,总共有100多个循环,不可能让一个程序跑一下午才出结果吧!问大家有没有优化的办法,用的就是memcpy
zgl7903 2013-05-05
  • 打赏
  • 举报
回复
可以再存一个原始数组的转置数组
  • 打赏
  • 举报
回复
谢谢您的回复 但是 您没有理解我的意思 我的意思是多行多列的时候只有某一行地址是连续的 那么需要多个for语句调用memcpy,这样依然很慢
baichi4141 2013-05-03
  • 打赏
  • 举报
回复
没有比memcpy更快的方法,信不信由你 话说你怎么得出“那样很慢啊”的结论的?其实你只是觉得写代码很麻烦吧?
ljz888666555 2013-05-02
  • 打赏
  • 举报
回复
一个memcpy应该不行,B数组地址不连续
  • 打赏
  • 举报
回复
大哥 首先谢谢你 但是我会用memcpy 我的提问就在于列的问题
yinghuashihun 2013-05-02
  • 打赏
  • 举报
回复
这个很简单啊,首先知道数组的地址是连续的 下面是从A的第a行开始复制,一直复制到第b行开始。 memcpy(B + (e - 1) * MAX, (A + (a - 1) * MAX, (b - a) * MAX); 列的复制稍微麻烦一点,不能使用memcpy函数,只能for循环一个字节一个字节复制

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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