ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] 메모리영역
    기초/C,C++ 2017. 3. 7. 09:09

     코드영역

     *실행할 프로그램의 코드가 저장되는 메모리 공간이다.

     

     *CPU가 코드영역에 저장된 명령문을 하나씩 가져다가 실행한다.

     힙영역

     *프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을   

      하기위한 영역이다.

     데이터영역

     *전역변수 static 변수가 할당되는 영역


     *프로그램시작과 동시에 할당되어 종료시까지 남아있는 특징의
     변수가 저장되는 영역

     스택영역

     *지역변수와 매개변수가 할당되는 영역

     

     *함수를 빠져나가면 소멸되는 변수를 저장하는 영역

     

     

    데이터영역 = static & 전역변수

    스택영역 = 지역변수 & 매개변수fre

     

    정적(static)

    int num;

    int num2[10];

     

    프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것이다.

     

    메모리의 크기는 프로그램이 시작하기 전에 결정된다.

     

    (자동으로 잡아주기에)

    배열처럼 선언된 크기를 벗어나는 곳에 값을 입력하거나

    배열의 크기를 고칠 수 없다!

     

    전역 변수를 사용할 경우 call by reference특징으로

    맨 마지막에 입력된 값이 남게된다.. 그렇다면?

    (call by reference의 좋은 예)

     

    동적(dynamic)

     프로그래머가 직접 원하는 구간에서 메모리를 할당하고 해제할 수 있다.

     

    **동적할당을 생성하는 함수**

    malloc()

     

     

     

    [사용헤더]

    stdlib.h

    malloc.h

     

    메모리 할당

    void* malloc(size);

    void *라는 자료형을 리턴하므로 사용하려는 자료형으로 형변환하여 사용한다.

    size는 타입의 크기를 구하는 sizeof를 사용하는것을 권장합니다.

    메모리 해제

    free(void *_Memory)

    memory에는 할당한 변수의 이름을 넣는다

     

    위에 코드를 동적할당으로 해보면

     

    typedef struct peo{

         char name[20];
         int age;
    }PEO;

     

      int * pn = (int *)malloc(sizeof(int));
      float * pb = (float *)malloc(sizeof(float));
      double * pd = (double *)malloc(sizeof(double));
      char * pc = (char *)malloc(sizeof(char));
      PEO * pp = (PEO*)malloc(sizeof(PEO)*num);
      strcpy(pp->name,"궁뎅이");
      pp->age = 31;

     

    이렇게 다른변수들과 구조체역시 malloc으로 가능합니다.

     

    (ex)

     

    배열 처럼 사용이 가능하다.

     

    *********중요*********

    메모리를 할당할때 누가 메모리를 사용중이라면?

    힙영역에 선언하는 순간 메모리를 할당하는데 그떄 빈 공간이 없다면

    사용할 메모리가 없다는 뜻이겠죠,,,

    그럼 프로그램 자체도 실행될 수 없게 되겠네요

    이럴 때

    할당하려는 공간이 없으면 NULL을 반환하기 때문에 메모리 값에 NULL 체크를 해줍니다.

     

    stdlib.h에는

    calloc이 있습니다.

    malloc함수는 초기값이 없이 쓰레기값이 들어있지만

    calloc함수는 초기값 0 이 존재합니다.

    사용법은 malloc대신 calloc을 넣어주시면 됩니다.

     

    realloc도 있습니다.

    malloc함수의 메모리값을 변경할 수 있습니다.

    이 두개는 잘 사용하지않지만 그냥 알아두시면 좋을 것 같습니다.

     

    '기초 > C,C++' 카테고리의 다른 글

    [C/C++] 간단한 예제(복습)  (0) 2017.03.18
    [C/C++] #define, 전처리기,  (0) 2017.03.08
    [C/C++] 구조체  (0) 2017.03.06
    [C/C++] 클래스, 구조체, 함수의 차이점  (0) 2017.03.03
    [C/C++] 반환 형식 ,Call by ~  (0) 2017.03.02

    댓글

Designed by Tistory.