ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스크랩] const, stack, heap 의 용도
    Computer 2012. 1. 3. 22:29

    2006/07/01 00:12



    * const

       -- 변수를 상수화 시키는데 사용된다.


    const int n = 0;
        상수화가 된 변수 이다.
        대입 연산은 허용 되지 않는다.

    const int * n;
        데이터 상수화를 하고 있다.
        n이라는 포인터가 가리키는 데이터를 상수화 시켰다.
        *n=20은 안된다. 대입 연산이 안된다.
        메모리 공간이 상수화가 된것은아니다.
        n으로 접근해서 데이터를 조작하는것을 막는것이다.
        하지만 
        a = 10;
        cosnt int * n = &a;

        a에 대한 데이터 조작은 가능하지만
        n이라는 포인터를 이용해서 a의 데이터 조작은 불가능하다.

     

    int * const n;
        포인터가 상수화 된것이다.
        n = &b;
        n = &a(x);
        포인터 연산 허용이 안된다.

     

    const int * const n;
        n이라는 가리키는 곳의 데이터도 상수화,
        n이라는 포인터도 상수화..

     

    메모리 할당..

    ##프로그램이 실행 되면 운영 체제가 메모리 공간을 할당 한다.##

     

    데이터 영역 : 전역 변수, Static 변수 를 위한 영역.(종료될때 까지 할당)
     
                       함수 내부에 선언된 Static 변수는 프로그램이 실행 될때 공간만 할당되고,

                       그 함수가 실행 될때 초기화 된다.

                       static으로 선언된 지역 변수들은 실행될때 공간이 이미 할당 되고, 선언한

                       함수가 호출될 때 초기화된다.

                      

    Stack 의 용도 및 특징
                        지역변수, 매개변수들의 공간
                        컴파일 타임에 메모리 공간의 크기 결정. 

                       main에서의 변수 공간은 컴파일 타임에 결정난다.


    Heap의 용도 및 특징

                        런타임에 크기가 결정되는 메모리 공간.

                        void function(int i)
                        {
                               int array[i];
                        } 

                        이 경우 함수 내부에 할당 하려는 공간이 넘겨 받는 파라미터를 이용하여 
                        런타임에 메모리 공간이 할당이 되게 되어 있다.
                        하지만 지역 변수는 컴파일 타임에 스택 영역에 할당 되게 되어 있고,
                        런타임에 공간 할당은 힙에 할당 되게 되어 있다.
                        여기서 이러한 런타임에 할당 하기 위해서는, malloc(), free()를 사용 해서
                        힙 영역에 공간이 할당 되게 하여야 한다.

                        malloc()은 런타임때 메모리를 (heap영역에) 할당 하기 위해서 사용된다..

     

     



    http://blog.naver.com/mission19/30003286003  

Designed by Tistory.