memmove
和 c++11 std::move
有什么区别?是否可以在重叠的内存位置上使用std::move
?哪种方法具有更高的速度性能?
几种方法:
- std::move 调用赋值运算符,而 memmove 不调用。因此,memmove 不适合非 POD 类型。
- std::move 适用于任何C++容器类型,而 memmove 仅适用于那些将元素线性存储在连续内存位置的容器类型(例如数组和 std::vector)。
- std::move 不适用于与左侧源范围重叠的目标范围(为此使用 move_backwards),而 memmove 适用于所有重叠范围。
在将 POD 类型复制到右重叠范围的情况下,memmove 和 std::move 可能具有类似的性能。在所有其他情况下,两者中只有一种是合适的,因此您无法真正比较性能。