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
'Programming > C' 카테고리의 다른 글
[C언어] 25장-2. 메모리의 동적 할당 (0) | 2021.04.14 |
---|---|
[C언어] 프로젝트 7. 동물 뒤집기 (0) | 2020.12.29 |
[C언어] 프로젝트 6. 물고기 키우기 (0) | 2020.12.28 |
[C언어] 프로젝트 5. 아빠는 대머리 게임 (0) | 2020.12.24 |
[C언어] 프로젝트 4. 비밀번호 마스터 (0) | 2020.12.24 |