gpt4 book ai didi

c - memcpy 的内部实现是如何工作的?

转载 作者:IT王子 更新时间:2023-10-28 23:29:37 28 4
gpt4 key购买 nike

标准 C 函数“memcpy”如何工作?它必须将(大) block RAM 复制到 RAM 中的另一个区域。因为我知道你不能在汇编中直接从 RAM 移动到 RAM(使用 mov 指令)所以我猜它在复制时使用 CPU 寄存器作为中间存储器?

但它是如何复制的?按 block (如何按 block 复制?),按单个字节 (char) 或它们拥有的最大数据类型(以 long long double 复制 - 在我的系统上是 12 个字节)。

编辑:好吧,显然你可以直接将数据从 RAM 移动到 RAM,我不是装配专家,我所学到的关于装配的所有知识都来自该文档 (X86 assembly guide),其中提到关于不能从 RAM 移动到 RAM 的 mov 指令的部分。显然这不是真的。

最佳答案

视情况而定。通常,您无法在单个周期中物理复制大于最大可用寄存器的任何内容,但这并不是当今机器的真正工作方式。在实践中,您真正关心的不是 CPU 在做什么,而是更关心 DRAM 的特性。机器的内存层次结构将在以尽可能快的方式执行此复制方面发挥至关重要的决定性作用(例如,您是否加载了整个缓存行?相对于复制操作,DRAM 行的大小是多少?)。一个实现可能会选择使用某种 vector 指令来实现 memcpy。在不引用具体实现的情况下,它实际上是一个字节对字节的副本,带有一个位置的缓冲区。

Here's a fun article描述了一个人优化 memcpy 的经历。主要的要点是,它始终会根据您可以廉价执行的指令针对特定的架构和环境。

关于c - memcpy 的内部实现是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com