首页 > Tinynote > memcpy vs memmove

memcpy vs memmove

2019年9月14日 发表评论 阅读评论

memcpymemmove 都可用于复制一段内存。

它们之间的区别很简单:

  • memmove 更安全:当源内存块和目标内存块存在重叠区域时,memcpy 的行为是未定义的。它可能崩溃或产生错误数据。而且在debug 和 release 模式下的表现各不相同。
  • memcpy 更快。

这是两种不同编程思想的实现。一种更注重安全, 一种更注重效率。

下面是两个方法可能的实现方式.

void memmove(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Create a temporary array to hold data of src 
   char *temp = new char[n]; 

   // Copy data from csrc[] to temp[] 
   for (int i=0; i<n; i++) 
       temp[i] = csrc[i]; 

   // Copy data from temp[] to cdest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = temp[i]; 

   delete [] temp; 
}

void memcpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
}

在编程的时候,应该更多地考虑使用 memmove 而不是 memcpy

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.