大佬教程收集整理的这篇文章主要介绍了memcpy正确的实施方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void memcpy(void* dest,void* src,int sizE) { uint8_t *pdest = (uint8_t*) dest; uint8_t *psrc = (uint8_t*) src; int loops = (size / sizeof(uint32_t)); for(int index = 0; index < loops; ++indeX) { *((uint32_t*)pdest) = *((uint32_t*)psrc); pdest += sizeof(uint32_t); psrc += sizeof(uint32_t); } loops = (size % sizeof(uint32_t)); for (int index = 0; index < loops; ++indeX) { *pdest = *psrc; ++pdest; ++psrc; } }
我不确定我理解它…..:
1)为什么要定义uint8_t * pdest,uint8_t * psrc,然后将其转换为uint32_t –
*((uint32_t*)pdest) = *((uint32_t*)psrc);
我认为从一开始pdest和psrc应该被定义为uint32_t …我缺少什么?
2)我认为这个实现存在问题:
如果src = 0x100且dst = 0x104
并且src(原始)看起来像那样:
------------------------- | 6 | 8 | 7 | 1 | ------------------------- 0x100 0x104 0x108 0x1C0
在执行之后它会是那样的
------------------------- | 6 | 6 | 6 | 6 |..... ------------------------- 0x100 0x104 0x108 0x1C0
尽管如此,以下内存布局应该是一个结果
------------------------- | 6 | 6 | 8 | 7 |.... ------------------------- 0x100 0x104 0x108 0x1C0
当源和目标重叠时,不保证memcpy()函数以定义的方式工作;因此,您标记为第二个问题不是问题.如果代替memcpy(),这个代码用在memmove()的实现中,那么问题就是真实的.
以上是大佬教程为你收集整理的memcpy正确的实施方法全部内容,希望文章能够帮你解决memcpy正确的实施方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。