【问题标题】:Moving a block of data around -- memcpy or memmove? [duplicate]移动数据块——memcpy 还是 memmove? [复制]
【发布时间】:2018-11-21 20:38:24
【问题描述】:

正如标题所暗示的,我想在内存中移动一块数据,应该使用memcpy 还是memmove?对于这个特定的应用程序,它有什么不同吗?

【问题讨论】:

标签: c memory memory-management embedded


【解决方案1】:

我相信区别在于memmove 在尝试写入之前将文本放入缓冲区,而memcpy 不会。因此,memcpy 如果您将块移动到的位置不与它开始的位置重叠,则更快,而如果您要重叠,memmove 更安全。

See this question for more details on the distinction.

【讨论】:

  • 好的,谢谢你的澄清。因为这个应用程序是嵌入式的并且大小/速度是一个约束memmove 将是要走的路。即使这些数据不被视为文本,更像是随机排列的数字,这有关系吗?
  • 这是完全错误的。 memmove 对重叠是安全的,而 memcpy 不是。并且 C 标准确实记录了 memmove 的执行好像字节首先复制到临时数组中,但这不是例程必须实际实现的方式。 (更可能的实现是根据哪个地址更大来选择是从头开始复制还是从尾开始复制。)性能差异通常是微不足道的。
  • @EricPostpischil 谢谢,我倒过来了。数据的格式无关紧要,只要它是某种字节即可。
  • memmove() 不需要(或在实践中使用)缓冲区;只需要比较源地址和目的地址的起始地址,如果源地址
猜你喜欢
  • 2019-06-15
  • 2011-05-23
  • 1970-01-01
  • 2011-07-19
  • 2021-04-03
  • 2017-12-11
  • 2016-09-07
  • 2012-08-21
相关资源
最近更新 更多