C언어의 메모리 구조

Jeon곰탱·2022년 11월 24일
0

c-lang

목록 보기
12/13

📌 개요

🎯 메모리를 깊게 deep dive!

  • 프로그램을 키면 운영체제가 프로그램을 위해 메모리 공간을 줌

  • 메모리 공간은 크게 스택(Stack), 힙(Heap), 데이터(Data)영역으로 나뉘어진다.

📌 데이터(Data) 영역

🎯 전역 변수와 static 변수가 할당되는 영역

  • 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸됨
#include <stdio.h>

int a = 10;	// 데이터 영역에 할당
int b = 20;	// 데이터 영역에 할당

int main() {
	...
	return 0;
}

📌 스택(Stack) 영역

🎯 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역, 함수 호출이 완료되면 사라짐

#include <stdio.h>

int a = 10;	// 데이터 영역에 할당
int b = 20;	// 데이터 영역에 할당

int main() {

	int i = 100;	// 지역변수 i가 스택 영역에 할당

	fct1(i);
	fct2(i);

	return 0;
}

void fct1(int c) {
	int d = 30;	// 매개변수 c와 지역변수 d가 스택영역에 할당
}

void fct2(int e) {
	int f = 40;	// 매개변수 e와 지역변수 f가 스택영역에 할당
}

📌 힙(Heap) 영역

🎯 필요에 의해 동적으로 메모리를 할당 할 때 사용

int main() {

	// 정상적인 배열선언
	int arr[10];

	// 비 정상적인 배열선언
	int i = 0;
	scanf("%d", &i);
	int arr[i];

	return 0;
}
  • 스택 영역에 할당될 메모리의 크기는 컴파일 타임(컴파일 하는 동안)에 결정함

  • 비 정상적인 배열선언의 경우 i의 크기가 4바이트 라는 것을 알 수 는 있으나, arr이라는 배열의 크기는 알 수 없다.

  • 힙 영역 : 할당해야 할 메모리의 크기를 프로그램이 실행되는 동안 결정해야 하는 경우(런 타임때) 유용하게 사용되는 공간

profile
Atomic habits make me

0개의 댓글