malloc과 new

조진호·2023년 4월 18일
0

오늘 수업은 다음과 같은 질문으로 시작한다.

배열 형태의 힙메모리를 할당 한 후 해제할 때 어떻게 free는 배열의 시작 주소만 받고 배열 메모리를 해제할 수 있을까?

free는 어떻게 배열 형태의 메모리를 해제하는 것일까?

char* p = (char*)malloc(sizeof(char) * 2);
free(p);

p에 저장된 것은 할당된 메모리의 첫 번째 주소일텐데 어떻게 배열 전체를 해제할 수 있는걸까? 스택오버플로우에서부터 비슷한 질문을 들고왔다.


그리고 이 질문에 대한 답변이다.

malloc() 함수를 사용할 때 배열 크기보다 조금 더 많은 정보의 데이터 메모리가 할당되는데 이 곳에 배열의 크기가 저장된다. 그리고 free() 함수는 이곳에 저장된 배열의 크기를 보고 그 크기만큼의 메모리를 해제하는 것이다.

그러면 new연산자는?

char* p = new char[2];
delete[] p;

delete 연산자에 "[]"기호를 추가해 배열 전체를 해제한다.

왜 new는 "[]"를 필요로 할까?

이 질문에 대한 답도 스택오버플로우에서 찾을 수 있었다.

new 연산자를 배열형태로 할당하는 것을 예상하지 못해 고려되지 않았다고 한다.

profile
코린이

0개의 댓글

관련 채용 정보