什么时候应该在c ++中使用memcpy和memmove?

时间:2014-09-15 21:25:52

标签: c++ c++11 memcpy

我反思memcpy。

我知道memcpy用于将变量复制到变量。

但最好不要使用:(例如)

int a = 5;
int b;

b = a;

而不是memcpy?

或使用std::move代替memmove

  1. MemcpyMemmove不是过时/慢功能(也许这些功能来自C)?
  2. 如果是,在C ++ 11标准中替换这些函数的最佳方法是什么?

2 个答案:

答案 0 :(得分:7)

为了降低重要性,优点是:

  • memcpymemmove是类型不可知的,因此它们可用于绕过严格的别名限制。

  • memcpymemmove不需要对齐,但在数据对齐时它们可能运行得更快。

  • memcpy可能更快,因为它可以一次复制多个元素。但是,使用std::is_trivially_copyable类型特征时,std::copy也应该这样做。

当然,它们的缺点是只使用简单的可复制类型,并且只使用指针,而不是迭代器。但是它们在C ++代码中有明确的用途,例如,当从网络数据包或文件块中提取未对齐数据或实现approximations to floating-point functions using bit tricks时。

答案 1 :(得分:-1)

你只考虑一个案例。没有人对memcpy变量使用memmoveint

它们基本上是高度优化的功能,可以复制大块数据。它们是系统功能。他们直接处理记忆。