* 실제로 포인터를 사용하는 경우들
- 동적으로 할당된 메모리를 사용하는 경우 ( p = new listNode())
- 함수의 매개 변수로 변수의 주소를 전달하는 경우
- 클래스의 멤버변수나 멤버함수를 호출하는 경우
1. 동적 메모리와 정적메모리의 차이는?
< 정적 메모리 할당 >
- 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당 받는 것
-> 메모리의 크기가 프로그램이 시작하기 전에 결정
-> 프로그램의 수행 도중에 그 크기는 변경될 수 없다.
int i, j; int buf[80]; char name[] = "hello world"; |
장점 : 간단하게 메모리 할당
단점 : 입력의 크기를 미리알 수 없는 경우 -> 더 큰 입력이 들어온다면 처리 못함
-> 더 작은 입력이 들어온다면 남은 메모리 공간 낭비
< 동적 메모리 할당(dynamic memory allocation) >
- 실행 도중에 동적으로 메모리를 할당받는 것
- 필요한 만큼의 메모리를 시스템으로 할당(new) 받아서 사용이 끝나면 시스템에 메모리 반납(delete)
- 힙(heap)
- 힙이란 ? : 코드공간/ 전역공간/ 스택을 제외하고 남은 메모리 영역
- 힙 장점? : 히프 할당받으면 함수가 종료되더라도 메모리 공간이 없어지지 않음!
but!!! 히프에서 할당받은 공간은 반드시 반납하여야 한다. :)
=> 반납하지 않고 계속 할당만 받으면 시스템이 정지할 수 있음!
* C++에서 메모리의 구분
# 코드공간(code space) : 코드 공간에는 프로그램 코드가 저장된다.
# 전역공간(global namespace) : 전역 공간에는 전역 변수들이 생성된다.
#스택(stack)
- 스택은 프로그램이 실행하면서 사용하는 공간
- 주로 함수 호출 시 함수 매개 변수 / 함수의 지역변수를 생성하는 공간
- 함수호출 후 자동적 소멸
#힙(heap)
3. 동적 메모리 반납이 필요한 이유
동적 할당된 메모리는 자동적으로 반납되지 않는다!
따라서 할당된 메모리를 가리키는 포인터를 항상 가지고 있다가 메모리가 더 이상 필요 없으면 delete를 사용하여 시스템에 반납하여야 한다!!
if, 동적 할당된 메모리를 반납하지 않고 포인터를 없애버리면 메모리를 반납할 방법이 없다.
-> 따라서 메모리를 프로그램이 종료되기 전까지 할당된 상태로 남아있다!
이상태를 ? 메모리 누수(memory leak)!
==> 반복적으로 메모리 누수가 일어나면 최종적으로 메모리 부족 현상초래!
출처 : POWER C++ / 천인국 저
'Language > C++' 카테고리의 다른 글
[c++] 함수선언 뒤 const (0) | 2014.06.20 |
---|---|
[c++] 레퍼런스, reference, int &ref = val; 레퍼런스 변수, 별명! (0) | 2014.06.17 |
<input> cin(), get(), getline() 함수 차이. (0) | 2011.04.03 |
C++ Preprocessor: Always Assert Your Code Is Right (0) | 2011.03.25 |
ostream/istream (0) | 2011.03.14 |