728x90
반응형
C 언어에서 메모리를 직접 다루는 것은 성능과 효율성을 고려할 때 매우 중요한 요소입니다. stdlib.h
헤더 파일에는 메모리를 조작하는 다양한 함수들이 포함되어 있으며, 그중에서도 memcpy
, memmove
, memset
, memcmp
는 가장 많이 사용됩니다. 이번 포스트에서는 이들 함수의 동작 방식과 사용법을 예제 코드와 함께 살펴보겠습니다.
1. memcpy
함수
개요
memcpy
함수는 한 메모리 블록에서 다른 메모리 블록으로 데이터를 복사할 때 사용됩니다. 하지만, 두 메모리 블록이 겹치는 경우 예측할 수 없는 동작(UB, Undefined Behavior)이 발생할 수 있습니다.
함수 원형
void *memcpy(void *dest, const void *src, size_t n);
매개변수 설명
dest
: 데이터를 복사할 대상 메모리 주소src
: 원본 데이터가 저장된 메모리 주소n
: 복사할 바이트 수
사용 예제
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[20];
memcpy(dest, src, strlen(src) + 1);
printf("복사된 문자열: %s\n", dest);
return 0;
}
주의 사항
memcpy
는 겹치는 메모리 영역을 처리하지 않으므로 겹치는 경우에는memmove
를 사용해야 합니다.- 성능이 빠르지만 안전한 복사가 필요한 경우에는 주의가 필요합니다.
2. memmove
함수
개요
memmove
함수는 memcpy
와 유사하지만, 겹치는 메모리 영역에서도 안전하게 복사가 가능합니다.
함수 원형
void *memmove(void *dest, const void *src, size_t n);
사용 예제
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
printf("이전 문자열: %s\n", str);
memmove(str + 6, str, 5); // 'Hello'를 'World' 위치로 이동
printf("이동 후 문자열: %s\n", str);
return 0;
}
차이점 (memcpy
vs memmove
)
함수 | 겹치는 메모리 복사 안전성 | 속도 |
---|---|---|
memcpy |
X (안전하지 않음) | 빠름 |
memmove |
O (안전함) | 상대적으로 느림 |
3. memset
함수
개요
memset
함수는 메모리 블록을 특정 값으로 채울 때 사용됩니다.
함수 원형
void *memset(void *s, int c, size_t n);
사용 예제
#include <stdio.h>
#include <string.h>
int main() {
char buffer[10];
memset(buffer, '*', sizeof(buffer));
printf("메모리 채운 값: %.*s\n", (int)sizeof(buffer), buffer);
return 0;
}
주요 용도
- 배열 초기화 (0 또는 특정 값)
- 버퍼 클리어
- 구조체 초기화
4. memcmp
함수
개요
memcmp
함수는 두 메모리 블록의 내용을 비교할 때 사용됩니다.
함수 원형
int memcmp(const void *s1, const void *s2, size_t n);
반환값
0
: 두 메모리 블록이 같음< 0
:s1
이s2
보다 작음> 0
:s1
이s2
보다 큼
사용 예제
#include <stdio.h>
#include <string.h>
int main() {
char a[] = "ABC";
char b[] = "ABD";
int result = memcmp(a, b, 3);
if (result == 0) {
printf("메모리 블록이 같습니다.\n");
} else if (result < 0) {
printf("첫 번째 블록이 작습니다.\n");
} else {
printf("첫 번째 블록이 큽니다.\n");
}
return 0;
}
마무리
이 포스트에서는 stdlib.h
의 대표적인 메모리 조작 함수인 memcpy
, memmove
, memset
, memcmp
에 대해 살펴보았습니다. 각 함수의 특징과 예제를 숙지하면 메모리를 다룰 때 더욱 안전하고 효율적으로 사용할 수 있습니다.
요약
memcpy
: 메모리를 빠르게 복사하지만, 겹치는 경우 안전하지 않음memmove
: 겹치는 메모리 복사도 안전하게 수행 가능memset
: 특정 값으로 메모리를 채움memcmp
: 두 메모리 블록을 비교
이제 C 프로그래밍에서 메모리 조작을 더욱 효과적으로 활용해 보세요!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C언어 `math.h`의 삼각 함수 정리 (0) | 2025.02.20 |
---|---|
C 표준 라이브러리 `math.h` 개요 및 기본 수학 연산 (0) | 2025.02.19 |
C `stdlib.h` 개요 및 동적 메모리 할당 (0) | 2025.02.17 |
C 언어 `string.h`의 문자열 숫자 변환 함수: `strtol`과 `strtod` (0) | 2025.02.16 |
C 언어 표준 라이브러리 `string.h` - 문자열을 숫자로 변환하는 함수 `atoi`, `atof` (0) | 2025.02.15 |