반응형
C++ 프로그램에서 메모리 사용 방식은 크게 4가지 존재한다.
• 스택
• 힙
• 데이터
• 코드
스택(Stack) 영역
• 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역
• 함수 호출이 완료되면 사라짐
void foo()
{
int x = 10; // x는 스택에 저장됨
}
힙(Heap) 영역
• 필요에 의해 동적으로 메모를 할당할 때 사용
• new, malloc 등을 통해 메모리 요청
• delete, free 메모리 해제
int* ptr = new int; // 힙에 int 저장공간 할당
*ptr = 20;
delete ptr; // 메모리 해제
데이터(Data) 영역
• 전역 변수와 static 변수가 할당되는 영역
• 프로그램의 시작과 동시에 할당되고,
프로그램이 종료되어야 메모리에서 소멸
int globalVar = 100; // 데이터 영역에 저장
void func()
{
static int count = 0; // 이것도 데이터 영역에 저장
}
[C/C++] static 변수
static 변수- static 변수를 정적 변수라고 부릅니다.- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다. 하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것으로 지역변수 적
zoosso.tistory.com
코드(Code/Text) 영역
실행될 프로그램의 명령어(함수 코드 등)가 저장되는 영역
[예제 코드]
#include <stdio.h>
void func_1(int);
int a = 10; // 데이터 영역에 할당
int b = 20; // 데이터 영역에 할당
int main() {
int i = 100; // 지역변수 i가 스택 영역에 할당
func_1(i);
return 0;
}
void func_1(int c)
{
int d = 30; // 매개변수 c, 지역변수 d가 스택영역에 할당
}
int형 변수 a, b는 프로그램 실행시,
main 함수 호출되기 전에 데이터 영역에 할당
(그렇기 때문에 프로그램이 종료될 때까지 메모리상에 존재 → 전역변수 역할)
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 임시(temporary) 객체 (13) | 2025.04.26 |
---|---|
[C++] 소멸자 함수 (8) | 2025.04.25 |
[C/C++] 비트 필드 구조체 (8) | 2025.03.23 |
[C++] noexcept (3) | 2025.03.20 |
[C++] RAII & stack unwinding (1) | 2025.03.19 |
댓글