본문 바로가기

Programming/C

[C언어] 25장-1. C언어의 메모리 구조

반응형

25장. 메모리 관리와 메모리의 동적 할당

1. 메모리 구조

작성하는 프로그램의 성격에 따라

 

하드웨어를 고려해야 하는 경우가 있다.

 

-> CPU를 고려하는 상황:    5%

-> 메모리를 고려하는 상황: 95%

 

메모리 관리의 중요성



[C언어의 메모리 구조]

-> 운영체제에 의해 할당된 메모리 공간

 

C언어를 이용해 APP을 개발하고 실행하면

우리가 실행을 요청하고 운영체제가 실행을 한다.

 

프로그램을 실행하면 메모리 공간에 할당이 된다.

메모리 공간은 효율적으로 사용하기 위해

 

-> 메모리 공간을 나눠서 유사한 성향의 데이터를 묶어서 저장을 한다. [관리의 편의성과 속도의 향상]

 

코드영역 실행할 프로그램의 코드가 저장되는 메모리 공간
CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행
데이터 영역 전역변수static 변수가 할당되는 영역
프로그램 시작과 동시에 할당되어 종료 시까지 남아있는 특징의 변수가 저장되는 영역
힙 영역 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기 위한 영역
스택 영역 지역변수매개변수가 할당되는 영역
함수를 빠져나가면 소멸되는 변수를 저장하는 영역

데이터 영역과 스택 영역

: 변수의 공간 [변수의 특성에 따라 분류]

 

변수

: 전역 변수 : 할당 -> 소멸 X [수명이 함수의 시작과 끝이 같은 변수] => 데이터 영역

: 지역 변수 : 할당 -> 반환    [수명이 함수가 반환하면 사라지는 변수]=> 스택 영역

 

힙 영역 [ 프로그래머가 설정한 변수]

 

: 전역 변수와 지역 변수 외 다른 변수의 영역


프로그램의 실행에 따른 메모리의 상태 변화

 

A.exe라는 프로그램이 실행이 되면,

전역 변수인 sum=25가 데이터 영역에 할당이 되고, main함수가 호출

 

함수 안에 있는 static 지역변수도 전역 변수와 동시에 할당

 [전역 변수와 static 변수의 차이는 범위]

 

그 후 스택 영역에 지역변수 num1=10이 스택영역에 할당된다.

 

fct(num1)이 호출되면 num1을 인자로 전달하고 

매개변수의 선언이 이루어진다. [n=10]

 

마지막으로 함수 내의 num2=12가 할당이 된다.

 

fct함수가 끝나면 num1++가 실행 n=10, num2=12가 소멸

 

 

 

1. 프로그램 실행

  sum=25 데이터 영역
    힙 영역
fct함수 : n=10, num2=12 num2=12
n=10
num1=10
스택 영역
main함수 : num1=10

2. fct 함수의 소멸

  sum=25 데이터 영역
    힙 영역
 
num1=11
스택 영역
 

3. retun 0 : 메인 함수 종료 ->  num1 소멸 -> sum 소멸

    데이터 영역
    힙 영역
 

스택 영역
 

함수의 호출 순서 : main -> fct1 -> fct2

스택의 반환 (지역변수의 소멸) : fct2 -> fct1 -> main

반응형