메모리 초기화 함수
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 |