Com*_*hip 1 c++ internals memmove
这更多是出于好奇而不是任何重要问题,但我只是想知道memmove 文档中的以下片段:
复制就像使用了中间缓冲区一样进行
(强调我的)。该公式向我表明,是否使用中间缓冲区是特定于编译器实现的。
如果您让我写memmove,我可能会自动执行以下操作:
n在堆上分配字节memcpy 温度的来源memcpy 到达目的地的温度我希望任何人都可以...
gcc——例如,它是否使用缓冲区并检查重叠,以便它可以memcpy直接;的确。“好像”意味着它必须表现得像它所做的那样;但并不限制实现实际这样做。唯一需要的行为是目标缓冲区以来自源缓冲区的正确字节结束,无论缓冲区是否重叠。
一个常见的实现是,如果目标在源之前开始,则从缓冲区的开头向前复制字节,否则从末尾向后复制。这可确保在覆盖之前始终读取源字节(如果存在重叠)。
没有错误,除非分配失败。效率低下的是分配和释放临时缓冲区,并将每个字节复制两次而不是一次。