C语言模拟实现memcpy,memmove函数

页面导航:首页 > 软件编程 > C 语言 > C语言模拟实现memcpy,memmove函数

C语言模拟实现memcpy,memmove函数

来源: 作者: 时间:2016-01-25 09:50 【

这里memcpy与memmove函数的模拟实现,需要用到空指针来传递参数,之后强制类型转换为char型,用size_t这个宏接受偏移量进行偏移,模拟实现如下: memcpy函数:void* my_memcpy(void*dst,const voi
 这里memcpy与memmove函数的模拟实现,需要用到空指针来传递参数,之后强制类型转换为char型,用size_t这个宏接受偏移量进行偏移,模拟实现如下:
    memcpy函数:
 
void* my_memcpy(void*dst,const void*src ,size_t count)
{
assert(dst);
assert(src);
void* ret = dst;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}

 

 
    memmove函数:
    memmve函数是为了避免memcpy函数出现的内存重叠(上篇提到过),而开发的新函数,思想就是,如果有内存重叠的情况,那我们从后向前拷贝,如果没有,就如memcpy一样,从前向后拷贝,实现代码如下:
 
void* my_memmove(void*dst, const void*src, size_t count)
{
assert(dst);
assert(src);
void*ret = dst;
if ((char*)dst > ((char*)src + count))//判断是否内存重叠
{
while (count--)
{
*((char*)dst + count) = *((char*)src + count);
}
}
else
{
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
return ret;
}

 

 
    进行内存拷贝,比字符串拷贝要多传递一个拷贝偏移量的参数,因为字符串拷贝往往是遇到0就停止拷贝,而内存拷贝不存在此类问题,运用这两类函数需要思考怎样才能高效地让程序运行。
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<