반응형
SMALL

학습목표

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도  지워진다.

 

 

메모리 정적할당의 장,단점

> 장점 

 : 프로그램에서 사용하게 될 변수의 기억 공간의 크기를 명확히 알고 있다면,

  - 메모리 정적할당은 쉽게 기억 공간을 사용할 수 있고, 에러의 발생 확률을 줄일 수 있다.

> 단점

 : 사용하게 될 기억 공간의 크기를 정확히 알지 못하거나, 사용되는 자료의 크기가 각각 차이가 심하다면,

  - 기억 공간의 낭비를 가져오게 되는 문제점

반응형
LIST

+ Recent posts