728x90
안녕하세요!
이번 글에서는 C++에서의 메모리 구조와 변수의 라이프사이클에 대해 자세히 설명해 드리겠습니다.
C++ 프로그램은 메모리를 사용하여 데이터를 저장하고 처리하는데, 변수들은 특정한 메모리 위치에 할당되며 특정한 순서로 메모리를 사용하게 됩니다.
메모리 구조
C++ 프로그램의 메모리는 크게 세 가지 영역으로 나눌 수 있습니다.
- 스택 (Stack) : 함수 호출 시 지역변수, 매개변수, 복귀 주소 등이 저장되는 공간입니다. 함수 호출이 끝나면 해당 함수에서 사용한 메모리가 자동으로 해제됩니다. 스택은 후입선출 (LIFO) 구조를 가지며, 크기가 동적으로 변경되지 않습니다.
- 힙 (Heap) : 동적으로 메모리를 할당하고 해제하는데 사용되는 영역입니다. new와 delete 연산자를 통해 메모리를 할당하고 해제합니다. 힙은 개발자가 메모리를 관리해야 하며, 할당한 메모리는 명시적으로 해제해야 합니다.
- 데이터 (Data) : 전역변수, 정적변수, 상수 등이 저장되는 공간입니다. 프로그램이 시작될 때 메모리에 할당되며, 프로그램 종료 시 해제됩니다. 데이터 영역은 읽기와 쓰기가 가능한 영역입니다.
변수의 라이프사이클
변수들은 특정한 라이프사이클을 가지며 메모리에 할당되고 해제됩니다.
- 전역변수 : 프로그램이 시작될 때 데이터 영역에 할당되고 프로그램 종료 시 해제됩니다. 전역변수는 프로그램 어디서든 접근 가능하며, 초기화되지 않은 경우 기본값으로 초기화됩니다.
- 지역변수 : 함수나 블록 내에서 선언되는 변수로, 스택에 할당되고 해당 함수나 블록의 실행이 끝나면 자동으로 해제됩니다. 지역변수는 선언된 블록 내에서만 접근 가능하며, 스택 프레임이 해제되면 메모리에서 사라집니다.
- 매개변수 : 함수에 전달되는 인수로, 스택에 할당되고 함수 호출이 끝나면 자동으로 해제됩니다. 매개변수는 해당 함수 내에서 사용되며, 함수 호출 시 값을 전달하게 됩니다.
변수의 할당과 해제
변수의 할당은 선언 시 해당 변수의 크기에 맞는 메모리 공간을 할당하는 것을 의미합니다.
- 변수의 타입에 따라 필요한 크기의 메모리를 할당합니다.
- 변수의 해제는 변수가 더 이상 필요하지 않을 때 해당 메모리 공간을 해제하는 것을 의미합니다.
- 지역변수와 매개변수의 할당과 해제는 함수의 호출과 반환과 직접적으로 관련되어 있습니다. 함수가 호출되면 해당 함수에서 사용할 변수들이 스택에 할당되고, 함수가 종료되면 스택 프레임이 해제되며 변수들이 해제됩니다.
- 전역변수는 프로그램 시작 시 메모리에 할당되고 프로그램 종료 시 메모리에서 해제됩니다.
변수의 라이프사이클과 메모리 구조를 이해하면 메모리 관리와 변수 사용에 대한 효율성을 높일 수 있습니다. 올바른 변수의 할당과 해제는 메모리 누수와 관련된 문제를 방지하고, 안정적인 프로그램 실행을 보장합니다.
다음 글에서는 동적할당과 메모리 누수에 대해 설명하겠습니다.
감사합니다!
728x90
'[C++] > 프로그래밍 기초' 카테고리의 다른 글
[C++] 프로그래밍 기초 : 전처리기 (4) | 2023.06.03 |
---|---|
[C++] 프로그래밍 기초 : 동적 할당과 메모리 누수 (2) | 2023.06.03 |
[C++] 프로그래밍 기초 : 자주 사용되는 자료구조 라이브러리 (0) | 2023.06.03 |
[C++] 프로그래밍 기초 : 자주 사용되는 표준 라이브러리 함수 (1) | 2023.06.03 |
[C++] 프로그래밍 기초 : 표준 라이브러리 (0) | 2023.06.03 |