Linux实现memcpy

一、引用 

1.linux C编程:重写 memcpy 函数_memcpy_fromio_老王不让用的博客-CSDN博客

2.实现一个高效率的内存拷贝函数memcpy_高效 内存复制函数_wykup的博客-CSDN博客

        以上两篇博客提供了很大思路,但是考虑到实际面试当中的时间等问题,结合以上两篇实现如下代码

//max_dest_len:接收buff的最大长度
//count:需要拷贝的字节长度
void *Memcpy(void *dest, size_t max_dest_len, const void *src, size_t count)  
{  int nbyte      = sizeof(long long);int byte8count =count/nbyte;	/*按每次8字节拷贝*/int byte1count =count%nbyte;	/*剩余的按字节拷贝*/long long* ds  = (long long*)dest;  long long* ss  = (long long*)src;  char * dts     = NULL;char * sts     = NULL;if(max_dest_len < count)return ;if((dest > src) && (dest < src+count)) //地址向后重叠{ds = (long long *)((long long)dest +count-nbyte);ss = (long long *)((long long )dest +count-nbyte);while(byte8count--) *ds-- = *ss--;ds++;ss++;dts = (char *)ds;sts = (char *)ss;while(byte1count--){*(char *)dts-- = *(char *)sts--; } }else{ //地址向前重叠或者不重叠while (byte8count--)*ds++ = *ss++;dts = (char *)ds;sts = (char *)ss;while (byte1count--)*(char *)dts++ = *(char *)sts++;   }return dest;  
}  

此代码可运行

核心思路(兼顾时间、实现难度等):

1.地址重叠,主要考虑向后重叠

2.效率,这里是以8字节的方式去拷贝

3.32位和64位机器数据结构所占字节的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络流量监控-sniffnet

{alert type“info”} 今天来分享一个监控流量的应用sniffnet。 github项目地址&#xff1a;https://github.com/GyulyVGC/sniffnet {/alert} 可以在github的readme上看到这个程序有的特性&#xff1a; 为什么要介绍它呢&#xff1a;主要是多线程、跨平台、可靠、操作简单 我…

Unity——热更新浅析

热更新的思想从本质上来讲&#xff0c;要考虑一些问题。例如&#xff0c;一个完整的游戏最多可以有多大比例的资源通过网络加载&#xff1f;能否让尽可能多的资源通过网络加载&#xff1f; 通过网络加载有很多好处&#xff0c;不仅可以极大减小安装包的体积&#xff0c;而且有…

SPSS教程:如何绘制带误差的折线图

SPSS教程&#xff1a;如何绘制带误差的折线图 1、问题与数据 研究者想研究45-65岁健康男性中&#xff0c;静坐时长和血胆固醇水平的关系&#xff0c;故招募100名研究对象询问其每天静坐时长&#xff08;time&#xff09;&#xff0c;并检测其血液中胆固醇水平&#xff08;cho…

Spring三级缓存解决循环依赖

Spring三级缓存解决循环依赖 一 Spring bean对象的生命周期 二 三级缓存解决循环依赖 实现原理解析 spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的&#xff0c;所说的缓存其实也就是三个Map 先实例化的bean会通过ObjectFactory半…

什么是同源策略(same-origin policy)?它对AJAX有什么影响?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 同源策略&#xff08;Same-Origin Policy&#xff09;与 AJAX 影响⭐ 同源策略的限制⭐ AJAX 请求受同源策略影响⭐ 跨域资源共享&#xff08;CORS&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记…

Redo Log工作原理

数据库如何持久化数据&#xff1f; 数据库一般都需要硬盘来进行数据持久化 &#xff0c;数据库在持续提供对外服务的过程会不断的进行写入操作&#xff08;增、删、改&#xff09;&#xff0c;为了保证每次成功的写入都能落盘&#xff0c;就需要每次进行写入操作都调用fsync操…

汽车服务门店小程序模板制作指南

在数字化时代&#xff0c;一个小程序的力量不可忽视。它不仅是展示品牌形象和提供用户服务的重要工具&#xff0c;更是扩大客户群体和提高营收的关键手段。对于汽车服务门店来说&#xff0c;拥有一个精美且功能齐全的小程序&#xff0c;更将成为你在竞争激烈的市场中的重要武器…

Docker中容器的随机命名方式

使用 docker 创建容器时&#xff0c;如果没有用 --name 指定&#xff0c;docker 会为用户选择一个名称&#xff0c; 格式是两个带有下划线的单词&#xff0c;如xxx_yyyy 其相关的实现在此处 pkg/namesgenerator/names-generator.go[1] 源码中有两个数组&#xff0c;第一个是一个…

MySql Delete 使用及优化

一、概述 DELETE是一个DML语句&#xff0c;用于从表中删除行。 DELETE语句可以从with子句开始&#xff0c;以定义DELETE中可访问的公用表表达式。 单表语法 DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias][PARTITION (partition_name [, partition…

【Git游戏】远程分支

origin/<branch> 远程分支在本地以 origin/<branch>格式存在&#xff0c;他指向上次和远程分支通过时的记录 git checkout origin/<branch> 会出现HEAD分离的情况 与远程通讯 git fetch —— 从远端获取数据&#xff08;实际上将本地仓库中的远程分支更新…

mysql 内置函数

目录 日期函数 current_date current_time current_timestamp date now date_add date_sub datediff 字符串函数 charset concat instr ucase lcase left length replace strcmp substring ltrim/rtrim/trim ltrim rtrim trim 数学函数 abs bin hex …

ES线程池设置

一文搞懂ES中的线程池 - 知乎 ES线程池设置-阿里云开发者社区 文章目录 一、简介 二、线程池类型 2.1、fixed 2.2、scaling 2.3、direct 2.4、fixed_auto_queue_size 三、处理器设置 四、查看线程池 4.1、cat thread pool 4.2、nodes info 4.3、nodes stats 4.4、no…

前端网络相关的面试题

get和post经过几次tcp连接? HTTP的GET和POST请求都是基于TCP协议的&#xff0c;因此在发送请求之前都需要建立TCP连接。TCP连接的建立通常被称为三次握手&#xff08;Three-way Handshake&#xff09;。 第一次握手&#xff1a;客户端发送一个SYN包&#xff08;同步序列编号…

【python爬虫】8.温故而知新

文章目录 前言回顾前路代码实现体验代码功能拆解获取数据解析提取数据存储数据 程序实现与总结 前言 Hello又见面了&#xff01;上一关我们学习了爬虫数据的存储&#xff0c;并成功将QQ音乐周杰伦歌曲信息的数据存储进了csv文件和excel文件。 学到这里&#xff0c;说明你已经…

nvm集合node版本,解决新版本jeecgboot3.5.3前端启动失败问题

jeecgboot前端3.5.3页面如下 使用之前的pnpm启动会报错&#xff0c;pnpm是node进行安装的&#xff0c;查询后发现&#xff0c;vue3版本的页面至少需要node16版本&#xff0c;我之前的版本只有15.5&#xff0c;适用于vue2 那么我将先前的node15.5版本删除&#xff0c;然后安装…

【Hadoop】DataNode 详解

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

Redis——》实现分布式锁

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【解决】idea启动spring MVC报错:一个或多个listeners启动失败Listener ClassNotFoundException

idea配置教程。tomcat调试报错Artifact :war exploded: Error during artifact deployment。 修改代码后&#xff0c;启动不生效&#xff0c;仍是旧代码。 根本原因是&#xff1a; Modules output path和Artifacts output directory不匹配 Modules output path一定要等于Ar…

网络编程 day 5

1、根据select TCP服务器流程图编写服务器 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.…

Uniapp中vuex的使用

vuex的学习笔记&#xff0c;很多地方还都不是很懂&#xff0c;先记下来再说&#xff0c;比小程序里自带的store复杂很多&#xff0c;看着头大&#xff0c;而且方法里面很多ES6的内容&#xff0c;头都看到爆炸 一、初始化vuex 新建store.js&#xff0c;挂载到main.js 1、在根…