C++ 메모리 구조

BS_Lee·2024년 4월 29일
0

C++

목록 보기
5/15

메모리 구조란?

  • 프로그램이 실행되려면 하드디스크에서 메모리로 프로그램을 로드해야되는데, 여기서 컴파일한 프로그래밍 파일 저장된 변수에 따라서 할당되는 메모리 공간이 다 다르다. 메모리 공간은 코드 영역, 데이터 여역 힙 영역, 스택 영역으로 나누어져있다.

코드 예제

int a = 1;

// 더하는 함수, 코드영역에 저장됨.
int Sum(int x, int y){
	// 공유 변수, 데이터영역에 저장됨.
	static int c;
	c = x + y;
	return c;
}

void main(void){
	int b = 2;
	// 변수를 넘겨주기 위해서 포인터로 선언함.
	// 포인터 변수는 스택영역에 저장된다
	int* p = new int(3);
	
	cout << Sum(b, *p) << endl;
	
	// 메모리 해제
	delete p;
}
메모리 영역해당 변수
스택 영역지역 변수x, y, b, p
데이터 영역전역, 정적 변수a, c
힙 영역동적변수new int
코드 영역함수Sum, main

C++에서는 컴파일 시, 모든 변수와 함수가 메모리에 적재된다.

C++ 메모리 적재 순서

데이터 영역

  • 프로그램이 시작부터 종료될 때까지 수명을 유지한다.
  • 컴파일 시에 초기 값이 할당된다.
  • 전역변수와 static변수가 저장되는 영역이다.
  • 프로그램 시작시 동시에 할당되며, 종료시에 소멸한다.

스택 영역

  • 함수 호출시 생성이 되고 함수종료시 제거된다.
  • 지역변수와 매개변수가 저장되는 영역이다
  • 함수 호출시 같이 할당되며 종료되면 해당 변수들이 스택에서 제거된다.

힙 영역

  • 동적으로 할당된 객체를 저장
  • 개발자기 직접 메모리를 할당하고 해제한다.
  • new연산자로 할당하고 delete로 연산자를 해제함.
  • 사용자가 직접 관리할 수 있는 메모리 영역이다.

코드영역

  • 프로그램의 실행코드가 저장
  • 읽기 전용이라서, 메모리에 상주하는 실행 코드를 포함.
  • 코드가 저장되는 영역이다. 기계어 명령어들이 저장되어 있으며, CPU는 이 코드들을 실행하여 프로그램을 동작시킨다.
  • 코드영역은 읽기 전용(Read-Only)이며, 보통 프로그램이 실행될 때 메모리 상단에 위치한다.

스택은 LIFO방식이기 때문에 메모리 누수가 발생하지 않는다.

힙에 할당된 메모리는 delete연산자를 사용하여 해제해야 한다.

profile
설명이 가능할 때까지 공부하기.

0개의 댓글