본문 바로가기
Programming/C,C++

[C언어] C언어의 메모리 구조 ; 데이터(Data)/스택(Stack)/힙(Heap) 영역

by yoiii 2021. 2. 7.

#C언어의 메모리 구조

프로그램을 실행하면 운영체제는 프로그램이 사용하고자 하는 메모리 영역을 할당해 준다.

이 때 할당되는 메모리 영역은 크게 데이터(Data), 스택(Stack), 힙(Heap) 영역으로 3가지로 나뉜다.

할당 시기는 프로그램이 실행될 때마다 할당하며, 할당 장소는 메인 메모리(RAM)이고, 할당 용도는 프로그램에 실행에 필요한 메모리 영역(지역 변수, 전역 변수 선언)할당을 위함이다.

 

#1 데이터(Data) 영역

전역 변수와 정적(Static) 변수가 할당되는 영역이다.

프로그램을 시작하면 할당하고, 종료하면 메모리를 해제한다.

 

#2 힙(Heap) 영역

필요에 따라 프로그래머가 동적으로 메모리를 할당하는 영역으로, 프로그램이 실행되는 동안(Run Time) 결정해야 하는 경우 사용한다. (Calloc,Malloc 등 동적 메모리 할당 함수와 함께 사용된다.)

 

#3 스택(Stack) 영역

함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역으로, 함수 호출이 끝나면 사라진다.

 


#데이터(Data) & 힙(Heap) 영역 예시

#include <stdio.h>

int val1 = 10; //전역변수val1 [데이터(Data)영역할당] 

int main(void){
	int i = 20; //지역변수i [스택(Stack)영역할당]
	sumFunc(i);
}

void sumFunc(int a){
	int sum = 0; //지역변수sum [스택(Stack)영역할당]
	sum = a + 10;  //매개변수 a [스택(Stack)영역할당] 
}

#스택(Stack) 영역 예시

#include <stdio.h>
#include <stdlib.h> // malloc,free 함수 선언 헤더파일 

int main(void){
	int size;
	
	scanf("%d",&size);
	
	int *ptr = malloc(sizeof(int)*size); // 메모리 동적할당 [힙(Heap)영역 할당] 
	
	for(int i=0; i<size; i++){
		ptr[i] = i;
	} 
	
	for (int i=0; i<size; i++){
		printf("%d ",ptr[i]]);
	}
	
	free(numPtr);
	
	return 0;
} 

 


댓글