본문 바로가기
프로그래밍 언어/C++

[C/C++] 메모리 영역(스택, 힙, 데이터 영역)

by 까망 하르방 2025. 4. 20.
반응형

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 변수

 

[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

댓글