버터감자
오늘도 내 하루는
버터감자
전체 방문자
오늘
어제
  • 분류 전체보기 (139)
    • 🏃‍♀️ Do it ! (80)
      • TIL (73)
      • Project (5)
      • Certificate (2)
    • 📓 TechNote (52)
      • RPA (1)
      • Python (2)
      • JAVA (13)
      • Spring (11)
      • SQL (7)
      • Git & GitHub (6)
      • CS (0)
      • HTML & CSS & JavaScript (2)
      • Tools (9)
      • API (1)
    • 🔔 Error (7)
      • Error (7)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 기본쿼리
  • 안드로이드
  • 버블소트
  • 문제풀이
  • 큐
  • 오라클
  • 톰캣
  • 부트스트랩
  • 코틀린
  • sqld
  • 객체지향
  • SQL
  • opacity
  • 스프링
  • 이클립스
  • 이것이자바다
  • 세션
  • 포트폴리오
  • final필드
  • 배열
  • 데이터베이스
  • callback
  • 함수
  • 게시판
  • 홈페이지
  • foreach
  • 스택
  • dml
  • 변수
  • 만들기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
버터감자

오늘도 내 하루는

메모리 모델 / 디버거 / 디버깅
🏃‍♀️ 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억 못 받는다.😥)  
실행이 되면 어떻게 해야 코드를 읽기 좋게 만들고, 범용적인 코드를 만들고, 

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

 

'🏃‍♀️ Do it ! > TIL' 카테고리의 다른 글

forEach / map / filter / Arrow / 즉시호출 / time  (0) 2022.08.08
함수의 메모리 적재 / 가변 파라미터 / 전개 연산자 / 디폴트 파라미터 / Callback / forEach  (0) 2022.08.05
함수 / 익명함수 / 임시객체  (0) 2022.08.03
반복문  (0) 2022.08.02
Datatype / 배열  (0) 2022.08.01
    '🏃‍♀️ Do it !/TIL' 카테고리의 다른 글
    • forEach / map / filter / Arrow / 즉시호출 / time
    • 함수의 메모리 적재 / 가변 파라미터 / 전개 연산자 / 디폴트 파라미터 / Callback / forEach
    • 함수 / 익명함수 / 임시객체
    • 반복문
    버터감자
    버터감자
    🌱 새싹 개발자의 코딩 블로그 🌱

    티스토리툴바