본문 바로가기
Programming/VC++

정적메모리할당/동적메모리할당

by ㅇㅏㄹI 수 2012. 3. 1.
※ 본 글은 인터넷에서 찾은 내용을 재편집한 겁니다. 원문은 참고사이트의 주소를 참고하세요.
메모리 : 데이터와 명령어를 저장하는 공간을 말한다.
컴퓨터가 어떠한 작업을 할 때 필요한 정보가 메모리에 존재하게 된다.
- 메모리가 클 기준 : HDD > RAM > CACHE > REGISTER
- 실행속도 기준     : HDD < RAM < CACHE < REGISTER

가상메모리 : 다양한 메모리 공간을  단순화시켜  하나의 공간으로 만든 것. 운영체제에서 관리한다.

프로그래밍시 메모리는 4가지가 있다.

Stack 영역 - 지역변수, 사용자 정의함수. 잠깐 사용하고 삭제할 데이터 저장공간,
Heap 영역 - 동적할당. 사용자의 의사에 의해 원하는 데이터를 사용자정의에 의해 할당된 메모리에 저장하거나 해제.
                 할당시 :  malloc, new
                 해제시 :  free,     delete
Data 영역 - 전역변수, 지역변수, static으로 선언되는 변수. 프로그램이 종료될 때까지 지워지지 않을 데이터를 저장할 공간.
Code 영역 - Text. 코드를 저장할 공간. Editor에서 작성한 명령어들이 여기에 저장된다.

Stack이 많으면 많을수록 동적할당할 수 있는 수가 줄어들고, Heap 영역이 많으면 많을수록 Stack 지역변수를 선언할 수 있는 크기가 줄어든다.

Class의 멤버함수는 code영역에 할당이 된다.
일반변수처럼 여러개 할당되는 것이 아니라 하나만 할당이 된다.

C언어 에서의 동적할당.
int* pA;
pA = (int*)malloc(sizeof(int)*10);
pA[0] = 1;     // 배열처럼 사용가능.
....
free(pA);       // 동적할당 해지

C++ 언어 에서의 동적할당.
int* pA;
pA = new int[10];   // 여러개 만들 때
// pA = new int;    // 한 개만 만들 때
pA[0] = 1;           // 배열처럼 사용가능.
delete []pA;     // 여러개 만들었을시 동적할당 해지
// delete pA;      // 한 개만 만들었을 때 동적할당 해지.







참고사이트
http://blog.naver.com/heapskewl73/80150372126
위키피디아-포인터(프로그래밍)
위키피디아-정적메모리할당
위키피디아-동적메모리할당
http://blog.naver.com/0bloodwind0/20127908176
http://msbang.co.kr/80143735099
728x90

댓글