int a = 73; char string[100]; strcpy(string, "abc"); |
코드1. 정적할당의 예 |
위와 같이 일반적인 변수선언은 스택영역에 메모리를 할당해줍니다. a라는 변수는 정수형이므로 스택영역에 4바이트를, string이라는 변수는 문자형 배열 100칸이므로 1바이트*100인 100바이트를 할당해줍니다.
스택영역은 메모리 할당과 해제가 자동이므로 저렇게 선언해주시고 사용만 하시면 알아서 메모리에서 해제가 됩니다. 스택영역에는 한 번 할당하면 끝까지 할당한 형태로만 사용해야하기 때문에 정적 할당(static allocation)이라고 부르죠.
스택영역과는 달리 힙영역에 할당하는 방식을 동적 할당(dynamic allocation)이라 부릅니다. 힙영역에 메모리를 할당하는 방식은 스택영역에 포인터 변수를 할당하고 그 포인터를 사용해서 힙 영역의 임의의 공간을 가리켜서 그 가리킨 곳부터 원하는 크기만큼을 할당해 사용하는데, 이 크기를 해제하고 또 다른 크기로 재할당하는 등 변화를 줄 수 있기 때문에 동적 할당이라 부르는 것이죠. 다음 그림을 보시기 바랍니다.
동적할당받은 공간은 다른 프로그램으로부터 보호를 받습니다. 힙 영역은 모든 프로그램이 공유하는 영역이기 때문이죠. 그렇기 때문에 보호할 필요가 있는 겁니다. 때문에 동적할당받아서 사용을 한 후, 사용이 끝났으면 이 영역을 해제해주어야 합니다. 그렇지 않으면 프로그램이 종료된 이후에도 보호된 상태로 남아있기 때문에 시스템이 이상한 현상을 보일 수도 있습니다. 다음은 정적할당하는 방법과 해제하는 방법입니다.
int* a = (int*)malloc( sizeof(int) ); char* string = (char*)malloc( sizeof(char) * 100 ); strcpy(string, "abc"); free( a ); free( string ); |
코드2. 동적할당의 예1 ~ C 컴파일러의 경우 |
int* a = new int; char* string = new char[100]; strcpy(string, "abc"); delete a; delete [] string; |
코드3. 동적할당의 예2 ~ C++ 컴파일러의 경우 |
C++ 컴파일러는 기본적으로 동적할당/해제 연산자인 new와 delete를 제공하지만 C에서는 그렇지 않기 때문에 malloc()과 free()라는 함수를 사용해야 합니다. 하지만 요즘은 C 전용 컴파일러만 있는 경우는 거의 드물기 때문에 C++ 컴파일러를 기준으로 설명하겠습니다.
[출처: 별나라 네트]
'Scrapbook > 개발 및 프로그래밍' 카테고리의 다른 글
[WAP 2.0/NATE] 픽토그램+링크 같이 선택하게 하기 (0) | 2006.08.24 |
---|---|
RSS 문서 제작을 위한 RSS 규약의 이해 (RSS 2.0) (0) | 2006.04.25 |
동적할당과 생성자 및 소멸자 (0) | 2006.04.06 |
생성자(Constructor) (0) | 2006.04.04 |
Visual Syudio .NET 2003 C++ 컴파일 에러 처리법(콘솔) (0) | 2006.03.30 |