zoukankan      html  css  js  c++  java
  • memcpy内存拷贝及优化策略图解


    一般内存拷贝与优化





    代码实现


    #include<iostream>

    usingnamespace std;

     

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

    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,const char* argv[])

    {

        char s[] = "12345";

        char *p1 = s;

        char *p2 = s+2;

        printf("%s ",p1);

        printf("%s ",p2);

        

        h_memcpy(p1, p2, 2);

        printf("%s ",p2);

        

        return 0;

    }


  • 相关阅读:
    jdk和dubbo的SPI机制
    何谓架构
    ElasticSearch的API使用
    LFU的基本原理与实现
    如何判断单向链表有环?
    mysql执行过程以及顺序
    原来 TinyPNG 可以这样玩!
    deno + mongodb 实战踩坑记
    好消息,vue3.0 进入 beta 阶段!
    听说会做这道题的人后来都进了头条?
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4029773.html
Copyright © 2011-2022 走看看