정체불명의 모모

강의 내용 정리(섹션2/함수 기초, 스택 메모리와 스택 프레임) 본문

프로그래밍(c++)/인프런 강의 정리(C++)

강의 내용 정리(섹션2/함수 기초, 스택 메모리와 스택 프레임)

정체불명의 모모 2024. 5. 13. 23:37

강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다.

강의 : (인프런) 게임 프로그래머 입문 올인원 


 

Stack Frame 구조

: 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역 입니다.

  스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.

 

    스택의 메모리를 사용하고 리턴 되었을때 스택 정보는 해제가 되는 건 아니다.(초기화 시켜 주진 않는다.)

 

  함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수등이 

  저장 됩니다.

매개변수 반환주소 지역 변수

 

▷ 스택 프레임의 동작 방식

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


스택 오버플로우(stack overflow)

: 스택 포인터가 스택의 경계를 넘어갈때 발생 합니다.

  쉽게 말해 Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생합니다.


▶ 발생 상황

  • 함수에 선언된 지역 변수의 크기가 Stack 보다 클경우
  • 함수를 무한으로 호출 하고 있을 경우
  • Stack을 넘어가 다른곳에 위치 하고 있는 경

함수를 무한으로 호출 하고 있을 경우


▷ Stack  Overflow 해결 방법

  • 존재하지 않는 인덱스나 주소를 찾고 있지 않은지 확인해 보기
  • 지역 변수의 크기를 줄이거나 전역 변수로 바꾸어 보
  • 함수 무한 호출 막기
  • 컴파일러 옵션에서 Stack 영역의 크기를 늘리기
Comments