美文网首页
memmove和memcpy

memmove和memcpy

作者: helinyu | 来源:发表于2022-02-14 14:49 被阅读0次

    内存移动

    void *memmove(void *str1, const void *str2, size_t n)
    str1 -- 这是指针数组,其中的内容将被复制到目标,类型强制转换为void类型的指针。
    str2 -- 这是要复制的数据源的指针,void
    类型的指针型铸造。
    n -- 这是要被复制的字节数。
    这个函数返回一个指针到目的地,str1。

    内存拷贝

    void *memcpy(void *str1, const void *str2, size_t n)
    str1 -- 这是指针数组,其中的内容将被复制到目标,类型强制转换为void类型的指针。
    str2 -- 这是要复制的数据源的指针,void
    类型的指针型铸造。
    n -- 这是要被复制的字节数。
    这个函数返回一个指针到目的地,str1。

    两者的作用是一样的,唯一的区别是:当内存发生局部重叠的时候,
    memmove保证拷贝的结果是正确的,
    memcpy不保证拷贝的结果的正确。

    参考两者的对比
    为什么不用memmove替换掉memcpy
    memmove 比memcpy 性能上稍微慢点

    memcpy出现内存重叠

    <1> memcpy一个一个拷贝, 如果将3,4拷贝到1,2位置,先讲过3拷贝到1,然后将4拷贝到2。
    如果将3,4拷贝到4,1位置,那么还会将3拷贝到4,这个时候4的位置是3了,会将原来4的位置的3的值拷贝到1的位置[出现问题]
    <2>memmove会先判断方向,然后再去进行拷贝,3,4拷贝到4,1的位置,会先判断方向,然后从后面开始拷贝。 【没问题】

    相关文章

      网友评论

          本文标题:memmove和memcpy

          本文链接:https://www.haomeiwen.com/subject/aqnclrtx.html