这是一个出于好奇而不是任何重要的问题,但我只是想知道memmove
文档中的以下代码段:
复制就像使用了中间缓冲区一样发生
(强调我的)。该公式向我表明,是否使用中间缓冲区是特定于编译器实现的。
如果您要我写memmove
,我可能会自动执行以下操作:
n
在堆上分配字节memcpy
温度的来源memcpy
到目的地的温度- 释放缓冲区
我希望任何人都可以...
- ...确认该公式是否只是因为用户更容易可视化正在发生的事情,而没有解决特定实现实际上必须使用中间缓冲区的问题;
- ...阐明了一些常见 C++ 编译器(如或 Visual C++)中的实际
gcc
实现- 例如,它是否使用缓冲区并检查重叠是否可以memcpy
直接执行; - ...也许指出我上面的简单算法中明显的错误/效率低下。