memcpy内存拷贝及优化策略图解

来源:互联网 发布:.net select 获取数据 编辑:程序博客网 时间:2024/04/30 10:02


一般内存拷贝与优化





代码实现


#include<iostream>

usingnamespacestd;

 

//不安全的内存拷贝(当源内存地址与目标内存地址重叠时会产生错误)

void h_memcpy(void*src,void *dst,intsize){

    if (src == NULL|| dst == NULL) {

       return;

    }

    

    const char *s =(char *)src;

    char *d = (char*)dst;

    

    while (size--) {

       *d++ = *s++;

    }

}

 

//内存移动(安全的内存拷贝,措施为根据源内存地址和目的内存地址不同使用不同的拷贝顺序)

void h_memmove(void*src,void *dst,intsize){

    if (src == NULL|| dst == NULL) {

       return;

    }

    

    const char *s =(char *)src;

    char *d = (char*)dst;

 

    if (s > d) {

       while (size--) {

           *d++ = *s++;

       }

    }elseif(s < d){     // 正向反向拷贝的目的就是为了避免未移动内存被覆盖

       d = d + size -1;

       s = s +size - 1;

       while (size--) {

           *d-- = *s--;

       }

    }

    // s == d, you should do nothing!~

}

 

 

int main(intargc,constchar* argv[])

{

    char s[] = "12345";

    char *p1 = s;

    char *p2 = s+2;

    printf("%s\n",p1);

    printf("%s\n",p2);

    

    h_memcpy(p1, p2, 2);

    printf("%s\n",p2);

    

    return 0;

}


0 0