시스템 메모리 구조는 위와 같이 나뉜다.
Code는 우리가 작성한 코드가 들어가있는 영역이다.
Data영역은 두가지로 나뉘는데 초기화가 되어있는 전역변수나 static 변수,
BSS는 0으로 초기화 되어있는 전역 변수나 static 변수
스택은 (LIFO : Last in First out) 구조로 위의 사진에서는 second()부터 순차적으로 할당해제가 된다고 보면 될 것 같다.
스택의 메모리가 감당할 수 없는 크기의 메모리를 할당하면 넘치게 되서 오류가 발생한다.
이를 방지하기 위해서는 heap영역에 접근할 수 있는 동적할당이 필요함
여기서 중요할점은 delete[] 한 후에 더사용을 해야한다면 반드시 포인터 변수를 다시 초기화하여 엉뚱한 값을 가리키지 않도록 해야한다.
delete를 하지 않으면 힙메모리영역에 사용하지도 않는 메모리를 계속 생성해놓을 수 있어서 메모리 누수(memory leak)가 발생할 수 있기때문에 동적할당 시에 반드시 해줘야한다.
'C++' 카테고리의 다른 글
[C++] 이중포인터와 동적 이차원 배열 생성 예제 (0) | 2021.01.10 |
---|---|
[C++] 포인터와 const (0) | 2021.01.10 |
[C++] 포인터의 기본 (0) | 2021.01.10 |