memcpy的内部实现如何工作?

前端之家收集整理的这篇文章主要介绍了memcpy的内部实现如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
标准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.主要的回归点是,它总是将基于您可以廉价执行的指令来针对特定的体系结构和环境.

原文链接:https://www.f2er.com/c/114167.html

猜你在找的C&C++相关文章