zoukankan      html  css  js  c++  java
  • memcpy 与 memmove 区别

    http://blog.csdn.net/lwbeyond/article/details/6830424

    memcpy() -- 拷贝内存内容

    表头文件: #include <string.h>
    定义函数: void *memcpy(void *dest, const void *src, size_tn)
    函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束''而结束
    返回值:   返回指向dest的指针
    附加说明: 指针src和dest所指的内存区域不可重叠

    重叠的例子:

    [cpp] view plain copy
     
    1. #include <string.h>  
    2. #include <stdio.h>  
    3.   
    4. int main()  
    5. {  
    6.   int i = 0;  
    7.   int a[10];  
    8.   
    9. /*0 1 2 3 4 5 6 7 8 9 */  
    10.   for(i; i < 10; i++)  
    11.   {  
    12.     a[i] = i;  
    13.   }  
    14.   
    15. /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/  
    16.   memmove(&a[4], a, sizeof(int)*6);    
    17.   
    18. /*0 1 2 3 0 1 2 3 0 1 不可以内存重叠*/  
    19.   for(i = 0; i < 10; i++)  
    20.   {  
    21.     printf("%d ",a[i]);  
    22.   }  
    23.   
    24.   printf(" ");  
    25. }  
    
    
    

    memmove() -- 拷贝内存内容

    表头文件: #include <string.h>

    定义函数: void *memmove(void *dest, const void *src, size_t n);

    函数说明:memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。

    不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。

    返回值: 返回指向dest的指针。附加说明: 指针src和dest所指的内存区域可以重叠。

    重叠的例子:

    [cpp] view plain copy
     
    1. <pre name="code" class="plain">#include <string.h>  
    2. #include <stdio.h>  
    3.   
    4. int main()  
    5. {  
    6.   int i = 0;  
    7.   int a[10];  
    8.   
    9. /*0 1 2 3 4 5 6 7 8 9 */  
    10.   for(i; i < 10; i++)  
    11.   {  
    12.     a[i] = i;  
    13.   }  
    14.   
    15. /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/  
    16.   memmove(&a[4], a, sizeof(int)*6);    
    17.   
    18. /*0 1 2 3 0 1 2 3 4 5 可以内存重叠*/  
    19.   for(i = 0; i < 10; i++)  
    20.   {  
    21.     printf("%d ",a[i]);  
    22.   }  
    23.   
    24.   printf(" ");  
    25. }</pre>  
    26. <pre></pre>  
    27. <br>  
    28. <span style="font-size:18px">有时VC和GCC结果显示二者一样,这是因为编译器都优化成了可以考虑内存重叠的情况。</span><strong><span style="font-size:18px"><br>  
    29. </span></strong><br>  
  • 相关阅读:
    Jmeter之Constant Timer与constant throughput timer的区别(转)
    JMeter Exception: java.net.BindException: Address already in use: connect(转)
    jmeter的jtl日志转html报告常见报错笔记
    jmeter 启动jmeter-server.bat远程调用报错: java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
    jmeter5.0生成html报告 快速入门
    图片转字符画 【学习ing】
    python生成个性二维码学习笔记
    Processing 3!
    Python Selenium定位元素常用解决办法
    js 获取元素坐标 和鼠标点击坐标
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/5257810.html
Copyright © 2011-2022 走看看