strcpy()、memcpy()、memmove()、memset()的实现
strcpy()、memcpy()、memmove()、memset()的实现
;*** ;memcpy.asm - contains memcpy and memmove routines ; ; Copyright (c) 1986-1997, Microsoft Corporation. All right reserved. ; ;Purpose: ; memcpy() copies a source memory buffer to a destination buffer. ; Overlapping buffers are not treated specially, so propogation may occur. ; memmove() copies a source memory buffer to a destination buffer. ; Overlapping buffers are treated specially, to avoid propogation. ; ;******************************************************************************* ;*** ;memcpy - Copy source buffer to destination buffer ; ;Purpose: ; memcpy() copies a source memory buffer to a destination memory buffer. ; This routine does NOT recognize overlapping buffers, and thus can lead ; to propogation. ; For cases where propogation must be avoided, memmove() must be used. ; ; Algorithm: void* memcpy(void* dest, void* source, size_t count) { void* ret = dest; //copy from lower address to higher address while (count--) *dest++ = *source; return ret; } memmove memmove - Copy source buffer to destination buffer ; ;Purpose: ; memmove() copies a source memory buffer to a destination memory buffer. ; This routine recognize overlapping buffers to avoid propogation. ; For cases where propogation is not a problem, memcpy() can be used. ; ; Algorithm: void* memmove(void* dest, void* source, size_t count) { void* ret = dest; if (dest <= source || dest >= (source + count)) { //Non-Overlapping Buffers //copy from lower addresses to higher addresses while (count --) *dest++ = *source++; } else { //Overlapping Buffers //copy from higher addresses to lower addresses dest += count - 1; source += count - 1; while (count--) *dest-- = *source--;l } return ret; }
不错.
strcpy()、memcpy()、memmove()、memset()的实现
strcpy(), 字符串拷贝. memcpy, 拷贝不重叠的内存块 void *MemCopy(void *dest,const void *src,size_t count) void *Memmove(void *Dst, const void*Src,size_t count)
memset:把buffer所指内存区域的前count个字节设置成字符c void * Memset(void* buffer, int c, int count) |