자동 공간, 정적 공간, 동적 공간
C++에서는 데이터를 저장해 두기 위한 메모리를, 대입하는 방법에 따라 자동공간(automatic storage), 정적 공간(static storage), 동적 공간(dynamic storage)으로 구분한다. 동적 공간은 자유 공간 또는 힙(heap)이라고도 부른다.
자동 공간
자동 공간(automatic storage)을 사용하는 함수 안에서 정의되는 보통의 변수들을 자동 변수(automatic variable)라고 한다.
예를 들어 임시 배열 temp는 getname()함수가 작동하는 동안에만 존재한다. 프로그램의 제어가 main()으로 다시 넘어가면, temp가 사용하던 메모리는 자동으로 해제가 된다.
만약에 getname()이 temp의 주소를 리턴했다면, main()에 있는 name 포인터는 곹 다른 용도로 사용될 운명을 지닌 메모리 위치를 지시하는 꼴이 되었을 것이다.
자동변수는 자신들을 포함하고 있는 블록 안에서만 유효하다. 자동 변수는 스택에 저장된다. 이것은 메모리사으이 스택에 그 값이 순차적으로 저장되고, 역순으로 해제되는 것을 의미한다.
정적 공간
변수를 정적으로 만드는 방법은 두 가지이다. 하나는 함수의 외부에서 변수를 정의하는 것이고, 다른 하나는 변수를 선언할 때 static이라는 키워드를 붇이는 것이다.
정적 변수는 프로그램이 실행되는 동안에 지속적으로 존재하고, 자동 변수는 특정 함수나 블록이 실행되는 동안에만 존재한다.
동적 공간
new와 delete 연산자는 보다 융통성 있는 방법을 제공한다. 이들은 자유 공간(free store)이라 부르는 메모리 풀(memory pool)을 관리한다. 이 풀은 자동 변수와 정적 변수가 사용하는 메모리와 분리되어 있다.
실전 프로그래밍: 스택, 힙, 메모리 누수
new 연산자로 자유 공간(힙)에 변수를 생성한 후 delete를 사용하여 이를 해제하지 않으면 무슨일이 벌어질까?
자유 공간에 동적으로 대입된 변수나 데이터 객체는, 그것을 지시하는 포인터를 포함하고 있는 메모리가 사용 범위와 객체 수명 규칙 때문에 해제된다고 하더라도, delete가 호출되지 않는 한 계속해서 살아남게 된다.
이러한 경우에 자유 공간에 생존하고 있는 변수나 데이터 객체에 접근할 수 있는 방도가 전혀 없다. 왜냐하면 변수나 데이터 객체가 저장되어 있는 메모리 위치를 지시하는 포인터가 이미 사라졌기 때문이다. 이것을 메모리 누수(memory leak)이라고 한다.
'C++ > C++ 기초 플러스 6판(Book)' 카테고리의 다른 글
[C++] 동적 배열과 배열 표기 (0) | 2025.03.24 |
---|---|
[C++] new와 delete의 역할 (0) | 2025.03.22 |
[C++] 포인터 선언과 초기화 (0) | 2025.03.22 |
[C++] C++ 프로그래밍 철학: 포인터와 템플릿이 존재하는 이유(객체 지향과 포인터의 관계) (0) | 2025.03.21 |
[C++] 프렌드, 예외, 기타 사항 (0) | 2025.03.14 |