반응형

메모리 초기화 함수

memset( void * _Dst,

            int _Val,

            size_t _Size );

연속된 메모리 초기화 함수, _Dst 시작되는 메모리 주소를 넣어주고, _Size sizeof(자료형*) * 개수 만큼 _Val 값으로 모두 초기화 해준다, for 대신에 사용할 있다.

 

 

 

메모리 복사 함수

memcpy( void* destination,

            void* source,

            size_t num );

 

memmove( void* destination,

               void* source,

               size_t num );

함수 모두 메모리의 일부분을 복사하여 가리키는 위치에 붙여넣는다, source 가리키는 곳부터 num 바이트 만큼을 destination 가리키는 곳에 복사한다. 또한 source '\0' 종료 문자(null terminating character) 검사하지 않는다. 언제나 정확히 num 바이트 만큼을 복사한다.

 

두함수의 차이는

memcpy 메모리의 내용을 직접 copy 하고, memmove copy 메모리의 내용을 임시 버퍼에 저장한 copy 한다, 그렇기 때문에 memcpy memory overlap 현상이 일어날 있고, memmove 그렇지 않지만

memcpy 비해 속도가 떨어진다

속도는 memcpy 좋고, 안정성은 memmove 좋다 하지만 2019 기준으로 memmove 속도가 memcopy 많이 따라잡아서 memmove 사용을 권장하는편이다

 

오버 플로우 문제를 방지하기 위해 destination source 가리키는 배열의 크기는 반드시 num 바이트 이상이어야 하며, 서로 겹치면 안된다.(만일 메모리 블록이 겹쳐져 있다면  memmove 함수를 이용하는것이 좋다)

반응형

'C' 카테고리의 다른 글

expression(표현식)  (0) 2020.03.12
Local Variable, Global Variable, Static Variable  (0) 2020.02.28
fseek, ftell, 파일 크기 알아내기  (0) 2020.02.25
FileStream Input Output  (0) 2020.02.22

+ Recent posts