码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-11-19 07:16:11      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:c语言.memcpy.memmov

    这里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就停止拷贝,而内存拷贝不存在此类问题,运用这两类函数需要思考怎样才能高效地让程序运行。

    如有不足,希望批评指正。

本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1714495

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

标签:c语言.memcpy.memmov

原文地址:http://10743407.blog.51cto.com/10733407/1714495

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!