블로그는 나의 힘!
[ Programing ]/C++2010. 1. 31. 07:17
const
- 변수를 상수화 시키는데 사용된다.


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


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

하지만,
int a = 10;
const int* n = &a;
a에 대한 데이터 조작은 가능하지만, n이라는 포인터를 이용해서 a의 데이터 조작은 불가능하다.


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


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



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

데이터 영역
: 전역 변수, static 변수를 위한 영역.
  전역 변수는 프로그램이 종료될 때 까지 할당.
  static  변수는 프로그램이 종료될 때 까지 할당.
  
  함수 내부에 선언된 static 변수는 프로그램이 실행될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다.
  static으로 선언된 지역 변수들은 실행될 때 공간이 이미 할당 되고, 선언한 함수가 호출될 때 초기화 된다.

stack의 용도 및 특징
: 지역 변수, 매개 변수들의 공간
  컴파일 타임에 메모리 공간의 크기 결정.
  main에서의 변수 공간은 컴파일 타임에 결정난다.

Heap의 용도 및 특징
: 런타임에 크기가 결정되는 메모리 공간.

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

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




===================================================================================


Posted by Mister_Q