gpt4 book ai didi

c++ -/是否/memmove 使用中间缓冲区?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:05 30 4
gpt4 key购买 nike

这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档:

Copying takes place as if an intermediate buffer were used

(强调我的)。该公式向我建议,是否使用中间缓冲区是特定于编译器实现的。

如果你要我写memmove,我可能会自动执行以下操作:

  • 在堆上分配 n 个字节
  • memcpy 临时文件的源
  • memcpy 到目的地的温度
  • 释放缓冲区

我希望任何人都能...

  1. ...确认该公式是否只是因为它更容易让用户可视化正在发生的事情,而没有修复特定实现实际上必须使用中间缓冲区;
  2. ...阐明一些常见 C++ 编译器(如 gcc 或 Visual C++)中的实际实现 - 例如,确实 它使用缓冲区并检查重叠,以便它可以直接 memcpy
  3. ...也许可以指出我上面的简单算法中明显的错误/效率低下。

最佳答案

  1. 确实如此。 “好像”意味着它必须表现得像它所做的那样;但并不限制实现实际做到这一点。唯一需要的行为是目标缓冲区以源缓冲区中的正确字节结束,无论缓冲区是否重叠。

  2. 一个常见的实现是,如果目标在源之前开始,则从缓冲区的开头向前复制字节,否则从结尾向后复制。如果存在重叠,这可确保源字节始终在被覆盖之前被读取。

  3. 没有错误,除非分配失败。低效之处在于分配和释放临时缓冲区,以及将每个字节复制两次而不是一次。

关于c++ -/是否/memmove 使用中间缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914923/

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