• 避免内存重叠memmove()性能


    #include <iostream>
    #include <string.h>
    using namespace std;
    void* memmove(void *dst, const void *src, size_t count){
    	// 容错处理
    	if (dst == NULL || src == NULL){
    		return NULL;
    	}
    	unsigned char *pdst = (unsigned char *)dst;
    	const unsigned char *psrc = (const unsigned char *)src;
    	//推断内存是否重叠
    	bool flag1 = (pdst >= psrc && pdst < psrc + count);
    	bool flag2 = (psrc >= pdst && psrc < pdst + count);
    	if (flag1 || flag2){
    		// 倒序拷贝
    		while (count){
    			*(pdst + count - 1) = *(psrc + count - 1);
    			count--;
    		}//while
    	}
    	else{
    		// 拷贝
    		while (count--){
    			*pdst = *psrc;
    			pdst++;
    			psrc++;
    		}//while
    	}
    	return dst;
    }

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    对拍
    311随笔
    精彩才刚刚开始
    做不下去了,就开心一下吧。
    情书
    论Sue这个人呐(=@__@=)
    P1113 杂务
    P1546 最短网络 Agri-Net
    P2009 跑步
    P2814 家谱
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4906167.html
Copyright © 2020-2023  润新知