memcpt的实现

栏目: 类库 · 发布时间: 2021-05-07

来源: liangyc

作者:liangyc

简介  这篇文章主要介绍了memcpt的实现以及相关的经验技巧,文章约1014字,浏览量3347,点赞数2,值得参考!

void *my_memcpy_byte(void *dst, const void *src, int n)
{
if (dst == NULL || src == NULL || n <= 0)
return NULL;

char * pdst = (char *)dst;
char * psrc = (char *)src;

if (pdst > psrc && pdst < psrc + n)
{
pdst = pdst + n - 1;
psrc = psrc + n - 1;
while (n--)
*pdst-- = *psrc--;
}
else
{
while (n--)
*pdst++ = *psrc++;
}
return dst;
}

 

 

在上面按字节拷贝中考虑了拷贝覆盖,连续的一段空间存放数据是从低地址到高地址进行存放。先从源地址读出数据,然后写入到目的地址空间中。目的空间的起始地址如果在源数据空间之内就会出现内存覆盖的情况。

这种情况先从尾部拷贝,避免覆盖数据,不过这种情况也会破坏src空间数据,src前使用了const关键字,也就是空间只读,在函数内部不修改src空间数据。

而标准库的memcpy并没有将写覆盖认为是内存拷贝,而是内存移动。memcpysrc代表一块内存空间,并用const关键字修饰,并不希望内存块被破坏。


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文地址:https://www.cnblogs.com/liangyc/p/11637762.html

浅谈Unity淡入淡出的效果的实现

003-正则的扩展、数值的扩展、函数的扩展、数组的扩展、对象的扩展

python的对象的属性(即对象的成员)是动态的

光阴的故事 (Live) ...分享时光

谈谈传统的监控设备与智能的监控的区别

异国的微笑,异国的微笑,异国美景

我和她的月亮的距离

WebApi 的CRUD 的方法的应用