CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): guest (asegseg) <dor206103.kaist.>
날 짜 (Date): 2002년 12월 18일 수요일 오후 10시 18분 54초
제 목(Title): Re: 포인터질문하나더


C++에는 new operator와 delete operator가 있습니다.

둘다 사용자가 직접 정의할 수도 있습니다.

하지만 그렇지 않을 경우에는(built-in operator)

그 둘은 각각 malloc과 free를 사용하여 메모리를 할당합니다.

new operator는 단순히 객체크기만큼만 malloc으로 할당을 할 것이고

new[] operator는 객체크기*사이즈 만큼 malloc으로 할당하게 됩니다.

물론 이때 메모리를 할당한 다음에 new operator는 그 해당객체의

constructor를 부르게 될 것이고(실제 코드에서 부르는 것이 아니라 compiler가

처리하는 부분), new operator[]는 사이즈 개수만큼 각각의 객체에 대해 constructor를 부르게

됩니다.

자 그럼 malloc은 어떻게 동작하냐면,

일단 malloc은 일반적으로 library함수입니다(즉, malloc이란 systemcall이 없다는 거죠)

malloc(size);하고 불리게 되면,

먼저 malloc이 관리하는 메모리 구조(implementation마다 다르겠죠)를 뒤져서, size만큼을

현재 할당할 수 있다면 할당해 줍니다.

이때 일반적인  implementation은 할당하는 메모리주소 바로 앞부분에, 이 공간의 크기를 함께

기록해 놓습니다.

즉 char *p=malloc(size); 라면,

p주소의 바로 앞부분(예를 들면 p[-4])에 공간의 크기가 기록되어 있는 것이죠..

이제 free(p)를 부르게 되면, p주소의 바로 앞부분에 있는 공간크기를 참조하여,

올바르게 해제할 수 있는 것이죠..

delete operator와 delete[] operator는 각 객체의 destructor를 부른다음(compiler가 자동으로

처리하는 부분), free(할당된 주소)로 call하게 됩니다.

new나 new[]가  malloc으로 할당을 하니 해제도 단순히 free로 하면 되는 겁니다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.