Win API使用記錄--RtlCopyMemory與RtlMoveMemory區別

1、RtlCopyMemory與RtlMoveMemory

      這兩個函數是內核函數api,對應Win32 API是CopyMemory和MoveMemory。都能實現內存塊的複製,兩者的區別在於CopyMemory是非重疊內存區域的複製,MoveMemory可以不考慮是否重疊,都可以安全複製。

CopyMemory實現如下:

void *memmcpy(void *dest , const void *src , size_t count)  
{  
    assert( (dest != NULL) && (src != NULL));     //安全檢查  
    assert( count > 0 );  
  
    char *psrc = (char *) src;  
    char *pdest = (char *) dest;  
    while( count-- )  
        *pdest++ = *psrc++;  
  
    return dest;  
}  

MoveMemory具體實現:

void *memmove(void *dest , const void *src , size_t count)  
{  
    assert( (dest != NULL) && (src != NULL));     //安全檢查  
    assert( count > 0 );  
  
    char *psrc = (char *) src;  
    char *pdest = (char *) dest;  
    //檢查是否有重疊問題  
    if( pdest < psrc )  
    {  
        //正向拷貝  
        while( count-- )  
            *pdest++ = *psrc++;  
    }  
    else if( psrc < pdest )  
    {  
        //反向拷貝  
        psrc = psrc + count - 1;  
        pdest = pdest + count - 1;  
        while( count-- )  
            *pdest-- = *psrc--;  
    }  
    return dest;  
}  

MoveMemory實現中有判斷目的地址和源地址值,如果目的地址值小於源地址值,正向拷貝,如果目的地址值大於源地址值,反向拷貝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章