模拟实现内存函数
模拟实现memcpy函数
memcpy函数的作用是将一段内存中的数据拷贝到另一段内存中,库函数包括三个参数,目标地址,拷贝的源头地址,拷贝的内容长度,单位为字节
以下为模拟memcpy写的my_memcpy函数:
//模拟memcpy函数
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* p = dest;
while (num--)
{
*(char*)dest = *(char*)src; //char*类型一次拷贝一个字节
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return p;
}
模拟实现memmove函数
memmove函数的作用跟memcpy函数的作用大致一样,但是功能相对于memcpy强大一些,在使用memcpy函数的时候,加入一个数组arr为{0,1,2,3,4,5,6,7,8},想把数组arr拷贝五个数据到数组arr+2的位置时,预想的结果应该是{0,1,0,1,2,3,4,7,8},但是结果却为{0,1,0,1,0,1,7,8},原因是在拷贝的时候是会对原数组中的元素进行覆盖,导致拷贝的结果不是我们预想中的结果,而memmove则能得到我们预想中的结果,在此基础上,如下为模拟memmove实现的my_memmove函数:
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* p = dest;
if (dest < src)
{
//从前往后拷贝
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
//从后往前拷贝
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return p;
}
通过判断目标空间与源头空间的地址判断谁大谁小来决定是从前往后拷贝还是从后往前拷贝。