博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcpy原码引发的内存拷贝注意事项
阅读量:4302 次
发布时间:2019-05-27

本文共 797 字,大约阅读时间需要 2 分钟。

一直以来知道memcpy函数有问题,没有处理内存重叠的情况;而memmove函数对这种情况进行了处理。今天碰巧有同事问到,特地翻了一下源码,了解一下实现方法,大体如下:

void *memcpy(void *dst, const void *src, size_t len)  {      if(NULL == dst || NULL == src){          return NULL;      }            void *ret = dst;            if(dst <= src || (char *)dst >= (char *)src + len){          //没有内存重叠,从低地址开始复制          while(len--){              *(char *)dst = *(char *)src;              dst = (char *)dst + 1;              src = (char *)src + 1;          }      }else{          //有内存重叠,从高地址开始复制          src = (char *)src + len - 1;          dst = (char *)dst + len - 1;          while(len--){              *(char *)dst = *(char *)src;              dst = (char *)dst - 1;              src = (char *)src - 1;          }      }      return ret;  }
从注释可以看出,当有内存重叠是,拷贝是倒序进行的。

特此记录,以备忘。

转载地址:http://femws.baihongyu.com/

你可能感兴趣的文章
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>