소프트웨어 개념

21.05.17 메모리 영역

슈팅스타제제 2021. 5. 17. 21:06

✔메모리가 필요한 이유

프로그램이 실행되기 위해서는!

프로그램과 그 프로그램에 사용되는 변수를 저장하기 위한 메모리가 필요하다. 

 

✔메모리 공간의 종류 

1. Code 코드 영역

실행할 프로그램의 코드가 저장되는 영역

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 

2. Data 데이터 영역 

프로그램의 전역변수정적변수가 저장되는 영역

프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸한다. 

3. Stack 스택 영역

함수 호출과 관련된 지역 변수와 매개변수가 저장되는 영역

함수의 호출과 함께 할당되고 함수 호출이 완료되면 소멸한다. (push 데이터 저장, pop 데이터 인출)

4. Heap 힙 영역

사용자가 직접 관리하는 메모리 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다. 

 

[낮은 주소] 코드 영역 - 데이터 영역 - 힙 영역 - 스택 영역 [높은 주소] 

 

메모리 영역

✔스택 프레임 stack frame

int main(void)
{
	func(); //func1 호출
    return 0;
}

void func1()
{
	func2(); //func2 호출
}

void func2()
{
 //메로로롱
}

후입 선출 LIFO

main 함수에서 func1 함수 호출, func1에서 func2 함수 호출

func2 함수 작업 완료, func2 스택 제거, func1 스택 제거, main 스택 제거

 

✔스택 오버플로우 stack overflow

다른 함수를 호출하게 되면 스택을 제거할 수 있지만 재귀 함수를 너무 많이 하게 되면  스택이 계속 쌓이고 스택 프레임을 벗어나기 때문에 스택 오버플로우가 발생하게 되고 에러를 발생시키면서 프로그램이 강제로 종료하게 된다. 

 

'소프트웨어 개념' 카테고리의 다른 글

22.09.09 [시큐어코딩] sonarqube  (0) 2022.09.09
22.08.11 소프트웨어 버전 관리 규칙  (0) 2022.08.12
22.07.05 DAO, DTO, VO  (0) 2022.07.05
22.07.05 mvc 패턴  (0) 2022.07.05