linux memcpy 效率,memcpy这个不定时炸弹

评论

# re: memcpy这个不定时炸弹

2012-09-11 00:21

ilvu

当memcpy有重叠时就要用memmove  回复  更多评论

# re: memcpy这个不定时炸弹[未登录]

2012-09-11 09:04

korall

应该是重叠引致的吧。

复制时数据重叠本来就应该要注意。

相对来说,memcpy 不考虑重叠的情况,复制效率好;memmove会考虑到源于目标的重叠,效率会低一点但是能正确工作。

但支持重叠也有限,如果目标头部和源尾部重叠,那么两者都无能为力。

其实这是程序员的事情  回复  更多评论

# re: memcpy这个不定时炸弹[未登录]

2012-09-11 09:08

korall

哦,倒是忘了,memmove 还有一种倒序拷贝,能支持目标头部与源尾部重叠的情况。  回复  更多评论

# re: memcpy这个不定时炸弹

2012-09-11 09:14

注册好麻烦

既然是粘包,怎么会有重叠问题呢。难道一块内存还有多种用途?

这种情况一般都是在数据量大的时候,出现的小几率事件造成的,应该检查读取逻辑  回复  更多评论

# re: memcpy这个不定时炸弹

2012-09-11 09:23

zuhd

@注册好麻烦

也有拆包的情况

回复  更多评论

# re: memcpy这个不定时炸弹

2012-09-14 15:51

hydra

明显的地址重叠问题,msdn上对memcpy的这种情景已经说的很清楚了:

If the source and destination overlap, the behavior of memcpy is undefined. Use memmove to handle overlapping regions.  回复  更多评论

# re: memcpy这个不定时炸弹

2012-09-15 06:55

neutralevil

关于memcpy的实现,还真就不是你抄出来的代码那样的,现代编译器都支持所谓Intrinsics技术,像memcpy这样的函数根本不会照源码老老实实生成函数代码和函数调用代码,而是在调用处直接插入优化后的汇编代码。要探究memcpy的真正行为,最好通过调试器查看汇编代码。  回复  更多评论

# re: memcpy这个不定时炸弹[未登录]

2014-09-23 08:24

FongLuo

char m_pSrc[1024*10];

当nLen=6, nOffset=24,调用

memcpy(m_pSrc, &m_pSrc[nLen], nOffset);

明显重叠了:

源范围:&m_pSrc[6] <==> &m_pSrc[6+24]

目的范围:&m_pSrc[0] <==> &m_pSrc[24]   回复  更多评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值