1. memset
内存设置函数,以字节为单位
模拟实现:
// 模拟 memset
void* my_memset(void* p, int value, size_t num)
{
assert(p);
int i = 0;
while (num--)
{
*((char*)p + i) = 0;
i++;
}
return p;
}
2. memcpy
内存拷贝
- 将
src
位置开始向后拷贝num
个字节的数据到des
t的内存位置 - 遇到
'\0'
并不会停止 src
和dest
指向的内存空间若有重叠,应使用memmove
模拟实现:
// 模拟 memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
while (num--)
{
*((char*)dest)++ = *((char*)src)++;
}
return ret;
}
3. memmove
- 可处理内存重叠的情况
- 若
src
小于dest
,则从前向后拷贝 - 若
src
大于dest
,则从后向前拷贝 - 如此即可避免重叠部分拷贝出错
// 模拟 memmove
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
if (src > dest)
{
while (num--)
{
*((char*)dest)++ = *((char*)src)++;
}
}
else
{
while (num)
{
*((char*)dest + num - 1) = *((char*)src + num - 1);
num--;
}
}
return ret;
}