加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

memcpy的内部实现如何工作?

发布时间:2020-12-16 05:39:21 所属栏目:百科 来源:网络整理
导读:标准C函数’memcpy’如何工作?它必须将(大)的RAM块复制到RAM中的另一个区域.因为我知道你不能直接从RAM到RAM(使用mov指令),所以我猜测它在复制时使用一个CPU寄存器作为中间存储器? 但它如何复制?通过块(如何通过块复制),通过单个字节(char)或它们拥有的最
标准C函数’memcpy’如何工作?它必须将(大)的RAM块复制到RAM中的另一个区域.因为我知道你不能直接从RAM到RAM(使用mov指令),所以我猜测它在复制时使用一个CPU寄存器作为中间存储器?

但它如何复制?通过块(如何通过块复制),通过单个字节(char)或它们拥有的最大数据类型(在long long double中复制 – 在我的系统上是12个字节).

编辑:好的,你可以直接将数据从RAM移动到RAM,我不是汇编专家,而且我所学到的关于汇编的所有内容都是从本文档(X86 assembly guide)中得出的,该文档提到了无法从RAM移动到mov指令的部分随机存取存储器.显然这不是真的.

解决方法

依靠.一般来说,您不能在一个周期内物理地复制大于最大可用寄存器的大小,但这并不是机器现在工作的真正原因.实际上,您真的不在乎CPU在做什么,更关心DRAM的特性.机器的存储器层次将以最快的方式执行此副本(例如,您是否加载整个高速缓存行?)相对于复制操作的DRAM行的大小是至关重要的决定性角色?实现可能会选择使用某种向量指令来实现memcpy.没有参考具体实现,它实际上是一个单字节字节复制与一个位置的缓冲区.

Here’s a fun article描述了一个人的冒险来优化memcpy.主要的回归点是,它总是将基于您可以廉价执行的指令来针对特定的体系结构和环境.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读