[C] C언어에서 가상메모리

Binsu·2021년 9월 9일
0

C

목록 보기
3/3

메모리 공간이 필요한 이유

  • 프로그램의 실행과정에서 선언하는 변수의 메모리 공간 할당을 위해서

  • 프로그램의 실행과정에서 사용되는 상수의 표현을 위해서

  • 연산 및 호출된 함수의 반환 값을 임시로 저장하기 위해서

가상 메모리를 나누는 기준

  • 실행할 프로그램의 코드를 올려 놓을(저장할) 공간 : Code 영역

  • 프로그램이 종료될 때까지 유지해야 할 데이터를 저장할 공간 : Data 영역

  • 아주 잠깐 사용하고 삭제할 데이터의 저장공간 : Stack 영역

  • 프로그래머가 원하는 방식으로 쓸 수 있는 공간 : Heap 영역

변수의 종류에 따른 메모리 할당 위치

  • Stack 영역 : 지역변수, 매개변수

    스택은 잠깐 사용하고 삭제할 데이터들을 저장하기 위해 마련해 둔 공간이다. 함수가 호출되는 과정에서 스택에 할당된 변수가 소멸되며, 함수에서 return 문이 실행되면 스택은 비게 된다. 변수 생성과 소멸의 과정에서 컴퓨터는 스택만 찾아 지우면 되기 때문에 성능의 향상으로 이어진다.

  • Data 영역 : 전역변수(Global Variable), static 변수

    전역변수는 초기화하지 않으면 0으로 초기화된다. 또한 프로그램의 시작과 동시에 메모리 공간에 할당되어, 프로그램의 종료 시까지 메모리 공간에 남아있다. 주의할 점은 전역변수는 반드시 상수로 초기화를 시켜야 한다는 점이다.

  • Heap 영역 : malloc 함수

    추가 예정

  • Code 영역 : 바이너리 코드

    함수 호출이 가능하려면 Code 영역에 컴파일 된 바이너리 코드가 올라가야 한다. 코드 영역에 대한 정비가 끝이 나야 비로소 함수 호출을 할 수 있다.(int main(){}, int Mul(){}, ... )가 바이너리로 메모리에 로드된다.

  • 레지스터 : register 변수

    추가 예정

추가자료

0개의 댓글