본문 바로가기
programming language/C

👩🏼‍💻TIL : 15. C언어의 메모리 할당

by NOHCODING 2022. 10. 24.
반응형

01. 정적 메모리 할당이란?

  • 컴파일러가 소스코드를 기계어로 번역하는 시점에 변수에 크기에 맞게 메모리를 할당하는 것
  • 프로그램이 실행될 때 메모리의 위치가 결정된다.
  • 프로그램 실행 중에 할당된 메모리의 크기는 변경이 불가하다

 

02. 변수가 메모리에 유지되는 시간 

  (1) 전역변수

  • 프로그램이 시작해서 종료할 때까지 유지 
  • 프로그램 실행 중에 전역 변수를 추가 혹은 삭제 불가
  • 프로세스의 데이터 세그먼트에 저장됨

  (2) 지역변수 

  • 함수가 호출될 때 메모리에 할당되었다가 함수가 끝나면 사라짐
  • 프로세스의 스택 세그먼트에 저장됨

 

03. 정적으로 할당된 메모리를 관리하는 법

  • 지역 변수를 사용하려면 그 변수의 현재 주소를 알아야한다.
  • 각 지역 변수의 현재 주소를 기억하려면 지역변수의 개수만큼 메모리가 더 필요하다.
  • 같은 함수에 선언한 지역 변수들을 하나의 메모리 그룹으로 관리 가능
  • 지역 변수를 시작 위치(start) 포인터와 끝 위치(END) 포인터를 사용하여 관리 가능
  • END 포인터가 필요한 이유는 뭘까? - 다음에 호출될 함수의 메모리 시작 위치를 결정
  • https://www.youtube.com/watch?v=5_p2WxmHuyM&list=PLiZvlxkcLhakQwbPjkyfuHFy1IVG-VXrP&index=22&ab_channel=%EA%B9%80%EC%84%B1%EC%97%BD

 

04. 스택에 대하여 

  • 스택(Stack)은 자료구조의 한 종류
  • 두 개의 포인터로 많은 양의 데이터를 효과적으로 관리하는 이론
  • 베이스 포인터(Base Pointer BP)를 기준으로 데이터를 추가할 때마다 순서대로 데이터를 쌓아 올림
  • 스택 포인터(Stack Pointer SP)로 새로운 데이터가 추가될 위치를 가리킴

  자료구조(이론) 컴퓨터 시스템(실제)
PUSH 스택 포인터 주소 증가 스택 포인터 주소 감소
POP 스택 포인터 주소 감소 스택 포인터 주소 증가

 

 

05. 컴파일러가 지역 변수를 저장할 메모리 공간을 확보하는 방법

  •  int a, b,c
  • 어셈블리어 (sub SP, 12) :SP 값을 12만큼 줄여 공간확보
  • 어셈블리어 (add SP, 12) :SP 값을 12만큼 증가시켜 공간 제거

 

06. 컴파일러가 스택에 할당된 지역 변수를 사용하는 원리

  • C언어 컴파일러는 지역 변수가 선언된 순서대로 메모리를 할당
  • 최근에 저장된 스택 포인터(SP) 바로 아래의 데이터부터 차례대로 꺼낼 수 있다.

 

 

07. Main 함수가 다른 함수를 호출 할때는?

  • instruction point : 명령어들이 가지고 있는 번호
  • main함수에서 다른 함수를 호출 할 때, 해당 함수가 호출 되고 나서 되돌아오기 위해 스택에 main 함수 ip를 저장해 둔다.
  • 그리고 main함수의 BP를 메모리에 저장하여 원점으로 바꿔준다.

 

반응형

'programming language > C' 카테고리의 다른 글

[C언어]🕜🕝비트 연산자🕜🕝  (0) 2022.10.31

댓글