lxgwm2008的专栏

一直以来知道memcpy函数有问题,没有处理内存重叠的情况;而memmove函数对这种情况进行了处理。今天碰巧有同事问到,特地翻了一下源码,,了解一下实现方法,大体如下:

void *memcpy(void *dst, const void *src, size_t len){if(NULL == dst || NULL == src){return NULL;}void *ret = dst;if(dst <= src || (char *)dst >= (char *)src + len){//没有内存重叠,从低地址开始复制while(len–){*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}}else{//有内存重叠,从高地址开始复制src = (char *)src + len – 1;dst = (char *)dst + len – 1;while(len–){*(char *)dst = *(char *)src;dst = (char *)dst – 1;src = (char *)src – 1;}}return ret;}从注释可以看出,当有内存重叠是,拷贝是倒序进行的。

特此记录,以备忘。

昨晚多几分钟的准备,今天少几小时的麻烦。

lxgwm2008的专栏

相关文章:

你感兴趣的文章:

标签云: