四个拷贝函数的分析与实现
作者:网络转载 发布时间:[ 2016/10/8 10:47:17 ] 推荐标签:拷贝函数 .NET
什么时候会发生内存重叠呢?
满足 :
1:src<dst<=src+n会发生重叠,需要反序拷贝。
2:当src>dst或者dst<src+n则不会发生内存重叠,此时 正序拷贝/反序拷贝皆可。
所以可以进一步简化为:
1:src>dst正序拷贝
2:src<dst反序拷贝
3:src=dst不拷贝
【上面提供了两种方式,本文我们简单点,将会采用第二种方式进行代码实现。】
下面是memmove的真正介绍了。
/*************************************************/
4.memmove函数
/*************************************************/
1原型:
void *memmove( void* dest, const void* src, size_t n );
其中:n为指定的拷贝的字节长度。
2定义
memmove用于从src拷贝n个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
3拷贝终止条件:
已经复制了n个字节
4代码实现
void* mymemmove(void *dst,const void *src,unsigned int n)
{
assert(dst!=NULL&&src!=NULL);
char* pdst=(char*)dst;
const char* psrc=(const char*)src;
if(pdst<psrc)//正序
{
while(n--)
{
*pdst++=*psrc++;
}
}
else if(pdst>psrc)//反序
{
psrc=psrc+n-1;//边界要考虑好。
pdst=pdst+n-1;
while(n--)
{
*pdst--=*psrc--;
}
}
return dst;
}
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南