본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 16일 차 : 메모리 관련 함수

안녕하세요 넬다이입니다.

 

오늘은 16일 차로써 메모리 관련 함수들에 대해서 정리해보겠습니다.

 


메모리 관련 함수

메모리 관련 함수에는 여러 가지가 있다.

그중에서도 대표적으로 memset() , memcpy()에 대해서 보도록 하겠습니다

 

memset()

메모리를 초기화해주는 함수. 

매개변수의 순서는 
1. 초기화할 메모리 공간의 시작 주소
2. 설정할 데이터
3. 설정할 데이터 사이즈

 

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iEng;
	int		iMath;
}INFO;

void main(void)
{
	INFO*	pInfo = new INFO[5];
	
	memset(pInfo, 0, sizeof(INFO) * 5);
}

memset을 간단하게 설명하자면은 지금 설정할 데이터를

0으로 두었기 때문에 0의 값으로 해당 메모리만큼(sizeof(INFO) * 5) 0으로 채운다.

 

보통 0으로 초기화하고 싶을 때 주로 사용을 하며 byte 단위로 값을 채우기 때문에 0 이외의 값을 넣었을 때에는

원치 않는 값이 들어갈 가능성이 높기 때문에 조심해야 한다.

 

memcpy()

메모리의 값을 복사해주는 함수

매개변수의 순서는 

1. 대상이 되는 주소

2. 원본이 되는 주소

3. 복사할 메모리의 길이

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iEng;
	int		iMath;
}INFO;

void main(void)
{
	INFO*	pInfo = new INFO[5];
	
	memset(pInfo, 0, sizeof(INFO) * 5);
    // 여기까지는 위에 내용과 동일하다.
    
    
	INFO*	pInfo2 = new INFO[5];

	memcpy(pInfo2, pInfo, sizeof(INFO) * 5);
}

 

위에 코드를 볼 때 pInfo2를 할당하고

memcpy를 통해서 기존에 0으로 memset 했던 포인터 변수의 값을 복사하는 것이다.

 

memcpy를 대충 보자면은 대상이 되는 주소 그러니깐 복사가 일어나서 채워질 변수는 pInfo2이며 복사를 해줄 원본은 pInfo로 채워 넣고 얼마만큼의 길이를 sizeof(INFO) * 5의 사이즈만큼 복사하겠다고 명령하는 것입니다.

 

또한 간단한 메모리를 복사하는 함수이지만 메모리 복사에 있어서 좀 더 안정성이 높여준다.

 

memmove()와 같은 함수도 있긴 한데 저 같은 경우 이제껏 한 번도 사용하지 않아서 설명에서는 뺏어요 혹 더 알아보고 싶으신 분들은 직접 검색해 보시는 것도 나쁘지 않을 듯합니다.

 

 

자 다음 시간에는 동적할당을 통해서 성적표를 만들어 보겠습니다.

구조체와 동적할당 함수들이 유기적으로 사용될 수 있도록 만들어볼 생각입니다.

여러분들도 오늘 강의가 짧다고 쉽게 공부를 놓아버리시지 마시고 복습을 한번 꼬옥 해보세요 ㅎ

 

[개발/C&C++] - (C/C++ 속성 정리) 15일 차 : 포인터와 동적할당

[개발/C&C++] - (C/C++ 속성 정리) 14일 차 : 함수의 사용방법

[개발/C&C++] - (C/C++ 속성 정리) 13일 차 : typedef , 구조체

[개발/C&C++] - (C/C++ 속성 정리) 12일 차 : string 컨테이너

[개발/C&C++] - (C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수

[개발/C&C++] - (C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열