[C, C++] memset 함수 사용하기
업데이트(2018.04.17): memset 함수를 사용하는 이유 및 참고자료 추가
C와 C++에서 memset 함수를 사용해보자
환경 및 선수조건
- C, C++
목적
memset
함수는 어떤 메모리의 시작점부터 연속된 범위를 어떤 값으로(바이트 단위) 모두 지정하고 싶을 때 사용하는 함수이다.
기본 함수 구조 및 매개변수
void * memset ( void * ptr, int value, size_t num );
ptr
: 채우고자 하는 메모리의 시작 포인터(시작 주소)value
: 메모리에 채우고자하는 값.int
형이지만 내부에서는unsigned char
(1 byte)로 변환되어서 저장된다.num
: 채우고자 하는 바이트의 수. 즉, 채우고자 하는 메모리의 크기
코드
- 코드
#include <string.h> // string.h 파일이 필요합니다.
#include <stdio.h>
int main (){
char a[20];
// 1바이트마다 모두 65로 초기화
// 배열을 채울 때는 sizeof()함수를 사용하면 됩니다.
// sizeof 함수 - 배열의 전체 바이트 크기를 반환합니다.
memset(a, 65, sizeof(a));
// 출력을 통해 확인
for(int i = 0; i < (sizeof(a)/sizeof(char)); i++){
printf("%c\n", a[i]);
}
}
memset 함수를 사용하는 이유
- 대체로
memset
함수는 특정 범위에 있는 연속된 메모리에 값을 지정하고 싶을 때 사용하는데for
문보다 더 빠른 속도가 나올수가 있다. - 여기서 나올수가 있다라고 표현한 이유는 컴파일러 그리고 컴퓨터 아키텍처에 따라서 다르기 때문이다.
- 자세한 내용은 아래 두 참고자료를 보면 Quora에는 어셈블리 코드로 비교한게 나와있고 Stack Overflow에는 관련한 내용들이 나와있다.