학습목표
1. 메모리 정적 할당과 동적 할당을 이해할 수 있다.
2. 메모리 정적 할당과 동적 할당을 이용하여 프로그램을 작설할 수 있다.
3. 메모리 관련 함수인 malloc(), free(), calloc(), realloc() 등의 기능을 설명할 수 있다.
주용용어
데이터, 힙, 스택영역, 정적 할당, static aloocation, 동적 할당, dynamic allocation
9.1. C 언어에서의 기억공간
> 프로그램의 실행을 위해 기억공간 필요
> 기억공간은 운영체제에서 할당
> 할당되는 기억공간의 영역
- 데이터 영역
- 힙 영역
- 스택 영역
기억 공간의 확보 방법
> 메모리 정적 할당 Static Allocation
- 기억공간의 데이터 영역과 스택 영역 이용
- 프로그램을 작성하는 단계에서 필요한 기억공간의 크기를 결정
> 메모리 동적 할당 Dynamic Allocation
- 기억공간의 힙 영역 이용
- 프로그램 실행 중에 입력되는 자료에 맞게끔 기억공간의 크기를 결정
9.2 메모리 정적 할당
> 변수 선언이나 배열 선언과 같이 프로그램을 작성하는 단계에서 필요한 기억 공간의 크기를 결정
- 변수 선언과 같이 할당 시켜 줘야 할 기억공간의 한계 크기를 명확히 알고 있을 경우 사용
- 메모리 정적 할당은 프로그램이 시작될 때 미리 기억공간의 크기를 고정하여 할당
// 메모리 정적할당의 예
#include <stdio.h>
void test1(int);
void test2(int);
int a = 100; // 전역변수로 선언된 변수 a 데이터 영역에 할당, 프로그램이 종료될 때까지 존재
void main(){
int b = a; // 지역변수 b가 스택영역에 할당, main() 함수가 종료될 때까지 존재
test1(b);
test2(b); }
void test1(int c){ // 매개변수 c 는 지역변수, 스택 영역에 할당
int d;
d= c+ 10; // 변수 d 도 c 로 초기화되어 스택 영역 도달
printf("test() : d = %d \n", d); } // test1 종료 후 변수 c,d 지워짐
void test2(int e){ // 매개변수 e와 변수 f가 스택영역에 할당
int f;
f = e + 20;
printf("test2() : f = %d", f); }
// test2 가 종료되면 변수 e,f 는 지워지고, main() 함수도 종료되면 스택영역에 할당되어 있던 b 도 사라진다.
// 프로그램이 종료되면 데이터 영역에 할당되었던 a도 지워진다.
메모리 정적할당의 장,단점
> 장점
: 프로그램에서 사용하게 될 변수의 기억 공간의 크기를 명확히 알고 있다면,
- 메모리 정적할당은 쉽게 기억 공간을 사용할 수 있고, 에러의 발생 확률을 줄일 수 있다.
> 단점
: 사용하게 될 기억 공간의 크기를 정확히 알지 못하거나, 사용되는 자료의 크기가 각각 차이가 심하다면,
- 기억 공간의 낭비를 가져오게 되는 문제점
'방송통신대학 > C 프로그래밍' 카테고리의 다른 글
기타 동적할당 함수 (0) | 2020.06.26 |
---|---|
메모리 동적 할당 함수 dynamic allocation (0) | 2020.06.25 |
순차 파일의 레코드 추가 (0) | 2020.06.21 |
순차 파일 읽기 getc() , fgetc(), fgets(), fscanf() (0) | 2020.06.20 |
순차 파일 putc() fputs() fprintf() (0) | 2020.06.19 |