Win API使用记录--RtlCopyMemory与RtlMoveMemory区别

    技术2022-07-12  62

    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实现中有判断目的地址和源地址值,如果目的地址值小于源地址值,正向拷贝,如果目的地址值大于源地址值,反向拷贝

    Processed: 0.013, SQL: 9