너무 오랫만에 쓰는 C언어 포스팅이넹..
오늘 개발 하다가.. memmove라는 함수를 사용하게 되었는데
까먹지 않기 위해서^^; 급 포스팅!!
사실 memory 관련 함수는 memcmp, memcpy 등만 사용했는데 이번에 memmove라는 함수도 있다는걸 알았다.
우선 MAN 페이지를 보면.. 다음과 같이 나온다
NAME SYNOPSIS void *memmove(void *dest, const void *src, size_t n); DESCRIPTION area dest. The memory areas may overlap: copying takes place as though the bytes in src are first copied into a temporary array that does not overlap src or dst, and the bytes are then copied from the temporary array to dest. RETURN VALUE CONFORMING TO SEE ALSO |
아주 쉽게 말해서 메모리를 복사하되, 그로 인해 겹쳐지는 메모리에 대해서 안전성을 보장해 준다는 뜻이다.
예를 들어 다음 예문을 보면,
int main(void) memmove(buf + 6 + 5, buf + 6 + 4, 5); return 0;
> 결과
buf : GLORIA*****SHARE |
BEST 부분이 * 다섯개로 바뀐 것을 볼 수 있다.
원래 memcpy만 사용하면, 다음처럼,
buf : GLORIA*****HARE
앞의 S까지 짤리게 되는데
memmove는 그런 상황을 방지해 준다.
memmove의 소스는 커널의 /lib/string.c 에서 볼 수 있다.
'Backend > C' 카테고리의 다른 글
About C Language (0) | 2012.04.12 |
---|---|
glib의 간단한 사용법 (0) | 2012.04.12 |
valgrind (0) | 2011.05.26 |
gprof (0) | 2011.05.26 |
GDB (0) | 2011.05.26 |