Delete[] 및 배열 감지
C에서 delete[]는 new[]를 사용하여 할당된 배열을 삭제하는 데 사용됩니다. 그러나 포인터가 배열을 가리키는지 시스템은 어떻게 알 수 있습니까?
컴파일러 및 운영 체제
원래 질문에서는 언어나 컴파일러가 이를 인식하지 못한다는 것을 암시합니다. 포인터의 유형에 따라 현실이 더 미묘해집니다. 컴파일러는 포인터가 배열인지 단일 요소 포인터인지 알지 못합니다. 그러나 운영 체제(OS)는 new를 사용하여 할당된 유형을 추적할 수 있습니다.
메모리 관리
new[]를 사용하여 배열을 할당하는 경우, 메모리는 배열 요소뿐만 아니라 배열 크기를 포함하는 메타데이터에도 할당됩니다. 이 메타데이터는 배열 요소 앞의 헤더에 저장됩니다. delete[]를 사용하면 OS는 이 헤더를 확인하여 배열 크기를 결정합니다.
단일 요소와 배열
단일 요소가 할당되는 경우 new(예: int* num = new int(1);)를 사용하면 메타데이터가 추가되지 않습니다. 따라서 deleteForMe(num); 호출되면 OS는 단일 int만 삭제합니다.
위 내용은 `delete[]`는 삭제하려는 배열의 크기를 어떻게 알 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!