메모리 관리 함수(memset, memcpy, memmove)

프로그래밍/C/C++ 2014. 10. 24. 00:19

메모리 관리 함수

메모리 관리함수는 문자열에 제한하지 않고 , 메모리에 할당된 값을 직접적으로 바꾸기 때문에 자료형에 상관없이 

사용할수있다몇몇 메모리 관리함수는 문자열 함수와 기본적인 동작 방식은 비슷하다. 하지만 다음과 같은 

차이점이 있다.

1. 인수와 리턴값의 타입이 다르다. 메모리 관리 함수는 거의 대부분 void *형태이다

    메모리의 바이트 단위로 작업을 하기때문에 자료형을 몰라도 되기 때문이다.

2. 문자열은 끝을 알리는 NULL 때문에 최대값 범위를 따로 지정안해줘도 되는 함수가 있었지만

    메모리는 어디까지 작업해야하는지 알려줘야하기 때문에 count 라는 인수를 써야한다.


memcpy(메모리 복사) 


1
void *memcpy(void *dst, const void *src, size_t count);

memcpy는 두 메모리의 값을 복사할때 사용한다. 복사될 대상의 주소 (매개변수1) , 복사할 대상의 주소(매개변수2) , 

그리고 복사할 크기(매개변수3) 을 써준다면 src의 값이 dstcount 만큼 복사될것이다. 배열은 요소끼리 개별적으로 

대입해야하는데 , memcpy는 메모리에 값을 바로 주소값으로 전달해서 복사하기때문에 바로 대입이 된다.


또한 memcpy는 대응되는 바이트 끼리 기계적으로 복사하기때문에 대상의 논리적인 구조는 무시한다

구조체 배열도 memcpy를 통해서 복사할수있다 .

  

memset(메모리 초기화 및 설정)


1
void *memset(void *dst, int c, size_t count);

memset은 보통 선언과 동시에 배열 초기화를 하지 않았을때, 혹은 실행중 특정값으로 바꾸고싶을때 사용한다.

사용법은 우선 *dst 에 복사될 대상의 주소 (매개변수1) 넣어주고, int c(2번째 매개변수) 에 바꿀 값(보통은 초기화 시

킬값), count*dst의 사이즈를 넣어주면 된다.

그러면 dst 의 시작 주소로 부터 count 만큼의 메모리 (보통은 count sizeof(dst)식으로 넣어서 값을 지정)가 전부 

int c 로 변한다.

 

memmove(메모리 이동)


1
void *memmove(void *dst, const void *src, size_t count);

 

memmove 는 메모리의 내용을 지정한 만큼 다른곳으로 옮긴다. 이 함수를 사용하면 배열 중간을 뒤쪽으로 밀어서 

빈공간을 만든후 그 공간에 다른 내용을 삽입해 넣을수도 있다

dst 에 이동할 위치 . src 에 이동대상의 시작점 , count 에 움직일 대상의 크기(문자열이면 NULL문자를 포함하자) 를 

적는다. (dst - src = 넣을 대상의 크기가 된다.)

 

'프로그래밍 > C/C++' 카테고리의 다른 글

c++ strtok  (0) 2014.12.13
스마트 포인터  (0) 2014.11.28
C++ 파일 입출력  (0) 2014.02.24
함수 주요 형태(_stdcall, _cdecl, _fastcall)  (0) 2014.02.24
비트 연산자  (0) 2014.02.12