memcpy的使用

rabbitjerry 2009-05-12 10:29:36
一个12行乘3列的二维数组。
一个12的一维数组。
想要把这个一维数组赋值给二维数组的第一列。

或者这样(这个是实际应用中的)
一个36大小的一维数组,一个12大小的一维数组,将后者的0,1,2...11付给前者的第0,3,6,9...33

不用for循环,因为数据量比较大,想节省时间,因此想用memcpy或者类似的函数,可以实现否?

...全文
305 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbitjerry 2009-05-14
  • 打赏
  • 举报
回复
我的数据量大概是十万量级的float型,for循环太慢了。
findcsdn 2009-05-14
  • 打赏
  • 举报
回复
可以考虑把12行3列 改成 3行12列, 这样就可以直接用memcpy 了。
山高人为峰007 2009-05-14
  • 打赏
  • 举报
回复
应该是可以用的
nk_ysg 2009-05-14
  • 打赏
  • 举报
回复
还是用for吧
zenny_chen 2009-05-14
  • 打赏
  • 举报
回复
你写个C代码给我看看memcpy你是怎么拷的,我给出优化方案。

zenny_chen 2009-05-12
  • 打赏
  • 举报
回复
如果你要在x86机器上执行,并且支持SSE2的话可以使用MOVDQA来提高效率。

如果是第二个需求的话,呵呵……

你的机器如果是Intel Core2 Duo 采用45nm技术,或是Quad,即Model为17H;或是更强大的Core i7,Model为1AH,它们反正都支持SSE4.1,那么可以使用BLEND相关指令完成。这个指令的功能非常强大。
它可以指定所要拷贝的数据位置,并且将未指定的不去改变其值。像做马赛克图像处理时就非常有用。

另外,MemoryCopy可能的话加上预取——prefetch可能会提高效率,但也有可能降低效率。要看你实际情况了。
really3353 2009-05-12
  • 打赏
  • 举报
回复
还是用for循环来实现吧,避免发生不必要的错误。况且用memcpy不一定会节省多少时间,反而会增加其它一些不必要的开销。
  • 打赏
  • 举报
回复
老老实实用for实现吧,就算你可以用其他方式转化,一旦操作了n/4次,等效于用 for的时间。

crst_zh 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
如果存储空间不是连续的,我想只能用循环吧,个人的浅见。
[/Quote]
同意

B[i]=A[i*3]
goodname 2009-05-12
  • 打赏
  • 举报
回复
如果存储空间不是连续的,我想只能用循环吧,个人的浅见。
xianyuxiaoqiang 2009-05-12
  • 打赏
  • 举报
回复
请使用for循环
nextel 2009-05-12
  • 打赏
  • 举报
回复
栈里面的数组是连续的,你用memcpy内存拷贝没问题。
once_and_again 2009-05-12
  • 打赏
  • 举报
回复



c++ 的设计者说,过

strcpy()和strncpy()的 区别,可以参考.前者没大小,但有结束符,
后者相反.

64,654

社区成员

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

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