c++ - 使用哪一个 - memmove() 或 memcpy() - 当缓冲区不重叠时?

标签 c++ c memory

在源和目标重叠时使用 memcpy() 会导致未定义的行为 - 在这些情况下,只能使用 memmove()

但是如果我确定缓冲区不重叠怎么办 - 是否有理由专门使用 memcpy() 或专门使用 memmove()?我应该使用哪个?为什么?

最佳答案

假设一个健全的库实现者,memcpy 将始终至少与 memmove 一样快。但是,在大多数平台上差异很小,并且在许多平台上,memcpy 只是 memmove 的别名,以支持(错误地)调用 memcpy< 的遗留代码 重叠缓冲区。

应该编写 memcpymemmove 以利用平台上最快的加载和存储。

回答您的问题:您应该使用语义正确的那个。如果可以保证缓冲区不重叠,则应使用 memcpy。如果不能保证缓冲区不重叠,则应使用 memmove

关于c++ - 使用哪一个 - memmove() 或 memcpy() - 当缓冲区不重叠时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960991/

相关文章:

python - 了解经过训练的神经网络内存使用情况

c++ - VIVADO HLS 中的综合错误

c++ - C 共享对象,带有 C++ 存档、静态 Ctors/Dtors 和 dlopen

c++ - 让 GDB 在回溯中扩展 arg=...

linux - 为什么可以在不事先分配内存的情况下使用堆栈?

linux - 如何限制 Linux 上的进程内存利用率(例如使用 BSD::Resource)

c++ - 不确定如何在 main() 中将参数从类传递到构造函数

c++ - map<T,T>::iterator 作为参数类型

c++ - 库函数 objdump 输出

c - DES 的三重 DES 实现