[C] 동적 할당 malloc( );
동적 할당을 배우기 앞서 이때까지 우리가 배운 변수들의 메모리 영역을 살펴보자.
메모리 영역
- 스택
- 데이터
- ROM
- 힙 영역(동적 할당)
변수
- 지역 변수 (스택 영역)
- 전역 변수, 정적 변수, 외부 변수 (데이터 영역)
변수, 포인터가 미리 선언된 것이 아닌, 프로그램이 실행이 되면 생기는 걸 만들고 싶다!
- 동적 할당이란?
- 프로그램 실행 도중에 내가 원하는 만큼의 메모리를 요청할 수 있는 것.
- 이때 사용하는 메모리 영역은 힙 영역이다.
- 그곳에 내가 원하는 만큼의 크기의 메모리를 받고 주소를 받는다.
- 거기를 어떻게 사용할지는 포인터를 통해 한다.
- 같은 메모리 공간이어도 포인터 타입에 따라 바뀜.
int main()
{
int* pInt = (int*)malloc(100);
// main 함수가 시작되고 나서 다음에 주소를 준다. 100 바이트를 할당해두고 변수에게 주소를 준다
// -> 그래서 포인터가 필요함
float* pF = (float*)malloc(4);
*pF = 1.23f;
}
- 왜 malloc는 void 타입일까?
malloc 반환 타입은 void 타입이다. 주소만을 저장하기 위한 목적이라 타입이 정해져 있지 않다.
void로는 원형이 없다 ->그래서 강제 타입 캐스팅을 해줌.
동적 할당해두는 메모리 입장해서는 어떤 타입인지는 내가 정한 포인터로 정해서 사용하면 된다.
malloc는 만들어지는 순간 목적이 없고, 요청한 만큼 메모리를 줄 뿐이다.
- 동적 할당
1. 런타임 중에 대응 가능
2. 사용자가 직접 관리해야 함(해제) -> free();
int* pInt = nullptr;
if(100 == iInput)
{
pInt = (int*)malloc(100);
}
if(nullptr != pInt)
{
free(pInt);
// free라는 함수는 내가 주소를 전달해 주면 그 주소가 가리키는 힙메모리를 해제 시켜준다.
}
return 0;
동적 할당은 언제 생길지도 상황에 따라 다를 수 있기에 만드는 것도, 해제도 직접 해제해줘야 한다.
free()라는 함수는 내가 주소를 전달해 주면 그 주소가 가리키는 힙 메모리를 해제시켜준다.
메모리 누수를 방지하기 위해 free()를 해줘야 한다.
'공부 > C, C++' 카테고리의 다른 글
[C] Bubble sort (0) | 2022.03.11 |
---|---|
[C] 가변 배열 (malloc) (0) | 2022.01.10 |
[C] 구조체 포인터 (0) | 2022.01.10 |
[C] wchar_t 함수 ( wcslen( ), wcscat_s( ) ) (0) | 2022.01.09 |
[C] 문자열, wchar_t (0) | 2022.01.09 |
댓글