c - memmove 实际上是 "move"一 block 内存并在源头留下零吗?

标签 c memcpy memmove

Possible Duplicate:
memcpy vs memmove

是否 memmove实际上“移动”了一 block 内存?如果是这样,它会留下零吗?或者,它就像 memcpy ?我正在查看手册页,但我不相信我的假设是正确的。如果我想使用 memmove 移动一 block 内存,我是否必须手动将我移动的那 block 内存清零?

最佳答案

memmove 与清除旧内存无关,事实上,只有在您想使用 memmove 的情况下,清除旧内存会破坏您刚刚复制的数据!这是因为 memmove 仅在您期望源和目标范围重叠时才有用。

通常,如果您发现自己需要 memmove,则表明您的设计存在严重的基本效率低下。例如,新的 C 程序员通常会尝试使用 memmove 来删除字符串的前几个字符(例如 memmove(s, &s[1], len))而不是不仅仅是使用 s+1&s[1] 来处理字符串的尾部。包含 memmove 的算法的性能很少比 O(n^2) 好。

关于c - memmove 实际上是 "move"一 block 内存并在源头留下零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877173/

相关文章:

c - 使用 qsort 按不同变量对结构指针进行排序

c - 在C语言中获得计算机决策速度的方法

c - 在 Windows 上使用 Cygwin64 编译器和调试器为 C 设置 VS 代码

c - 从结构到数组的不完整复制

c++ - 如何将 2 个元素从 head 移动到 vector 中的给定位置

c++ - std::copy 的限制是否比 std::memcpy 更宽松?

c - 在 C 中应该在哪里声明结构的定义? .c 还是 .h?

dart - Dart中的memcpy等效项

c++ - std::memcpy 或显式 char 值赋值 - 在 C++ 中相等且合法

vector - Rust 中向量的元素如何左移?