🏃‍♀️ Do it !/TIL

메모리 모델 / 디버거 / 디버깅

버터감자 2022. 8. 4. 21:50
728x90

2022 / 08 / 04 목

 

  • 메모리 맵 / 메모리 모델
  • 디버거 debugger

✔️ 메모리 모델

 

함수가 실질적으로 움직이는 방법 

메모리를 잡는 구조는 cpu / 운영체제에 따라 다르다.

내가 짠 프로그래밍의 함수는 상단 그림처럼 움직이게 된다. 


메모리 맵 ( memory map ) , 메모리 모델에는
Globla Area, Heap Area, Stack Area 세 영역이 있으며,
각 영역마다 갖고 있는 성격이 다르다.
 
 

1 . Globla Area (전역영역)

프로그램이 시작할때부터 끝날때까지 모든 곳에서 유효한 접근이 가능하다. 
즉 어디에서나 접근이 가능하다.
전역영역에는 함수의 명령어 집합 ( instruction set ) 과 전역영역에 선언한 변수들이 들어간다. 
 

2 . Heap Area

data측면 특징
 - 기본 데이터 타입이 아닌 data들이 위치
 - 어떻게 될지 모르는 애들 , 실행될때가 되어야 알 수 있는 data가 위치 
 
운영방식 특징 
- 변수에 이름을 써서 변수명으로 접근하는 것이 아니라, 레퍼런스값을 통해 접근한다. 
  왜 레퍼런스 값을 통해 접근하냐면, data의 생성여부가 불투명하기때문이다.  
- 레퍼런스 값을 stack이나, global 영역의 변수에 저장하여 간접적으로 접근

 

더보기

 

 


3 . Stack Area

- stack이란 자료구조의 한 유형
- 선입 후출 FILO 구조 체계를 갖고 있다.
- 함수내에서 선언한 변수들이 들어간다.


🔔추가적으로 알아두면 좋은 개념들
더보기
  • compil time binding
  • Run time binding
  • load time binding
  • heap fragmentation
  • lnternal f
  • external f

✔️ 디버거  debugger 

디버거란? 

제어권을 디버거로 이관하여 프로그램의 상태를 확인하고, 문제점을 개선하기 위해서 사용하는 것. 

 

간단히 말하자면,

직접 만든 코드가 어떻게 돌아가는지 직접 눈으로 보고 싶을 때

( 야! 메모리에 뭐 있냐 내가 좀 보게 멈춰봐봐 ! ) 하며,

실행 제어권을 갖고 프로그램의 상태를 확인하는 것이다. 

 

디버거의 상태를 보는방법 
 
1 . break point / 중단점
 
확인하고자하는 코드 라인을 클릭
 
2 . step over 
 
Funtion 전체를 수행
 
3 . watch / 감시
 
변수값을 조사한다
 
4 . call stack / 호출
 
현재 호출된 Funtion depth 를 표시해준다.
 
 

 

코딩을 할 때는 반드시 생각을 하고 시작해야 한다.

어떤 함수를 써야 하는지, 그 함수를 어떻게 좋게 사용해야 하는지 try 해야 한다.

코딩을 짜고, 실행해보고 와 된다~ 하며 만들면 땡이라는 생각만 하고 코딩을 끝내면 결코 성장하지 못한다.

( 연봉 1억 못 받는다.😥)  
실행이 되면 어떻게 해야 코드를 읽기 좋게 만들고, 범용적인 코드를 만들고, 

재사용하려면 어떻게 해야 하는지 등 생각하는 과정을 거쳐야 한다!_!