目录
一、memset
功能:内存初始化函数,对一块内存空间进行初始化。
dest:一块空间中每个字节要初始化的数据
c:对这块空间中每个字节初始化的数据
count:从dest起始地址开始,要设置多少字节的空间
返回值:返回dest空间首地址。
//模拟实现:
void *my_memset(void*dest,int c,size_t count)
{
assert(dest != NULL);
for(int i=0;i<count;i++)
{
*(((char*)dest)+i)=c;
}
return dest;
}
二、memcpy
功能:内存拷贝函数,将源空间拷贝num字节的数据到目标空间
返回值:返回dest空间首地址。
//模拟实现:
void *my_mencmp(void *dest, const void *src, size_t num)
{
assert(dest != NULL&&src != NULL);
char *d = (char*)dest;
char *s = (char*)src;
while (num--)
{
*d = *s;
d++;
s++;
}
return dest;
}
三、memmove
功能:用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
1.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
2.如果源空间和目标空间出现重叠,就得使用memmove函数处理。
//模拟实现:
void*my_memmove(void *dest, const void *src, size_t num)
{
assert(dest != NULL&&src != NULL);
char *d = (char*)dest;
char *s = (char*)src;
if ((d > s) && ((s + num) > d))//数据拷贝过程中有重叠,从后往前拷贝
{
d = d + num - 1;
s = s + num - 1;
while (num >= 0)
{
*d = *s;
d--;
s--;
num--;
}
}
else//没有重叠
while (num > 0)
{
*d = *s;
d++;
s++;
num--;
}
return dest;
}