>  기사  >  백엔드 개발  >  `delete[]`는 삭제하려는 배열의 크기를 어떻게 알 수 있나요?

`delete[]`는 삭제하려는 배열의 크기를 어떻게 알 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-17 09:07:03750검색

How Does `delete[]` Know the Size of the Array It's Deleting?

Delete[] 및 배열 감지

C에서 delete[]는 new[]를 사용하여 할당된 배열을 삭제하는 데 사용됩니다. 그러나 포인터가 배열을 가리키는지 시스템은 어떻게 알 수 있습니까?

컴파일러 및 운영 체제

원래 질문에서는 언어나 컴파일러가 이를 인식하지 못한다는 것을 암시합니다. 포인터의 유형에 따라 현실이 더 미묘해집니다. 컴파일러는 포인터가 배열인지 단일 요소 포인터인지 알지 못합니다. 그러나 운영 체제(OS)는 new를 사용하여 할당된 유형을 추적할 수 있습니다.

메모리 관리

new[]를 사용하여 배열을 할당하는 경우, 메모리는 배열 요소뿐만 아니라 배열 크기를 포함하는 메타데이터에도 할당됩니다. 이 메타데이터는 배열 요소 앞의 헤더에 저장됩니다. delete[]를 사용하면 OS는 이 헤더를 확인하여 배열 크기를 결정합니다.

단일 요소와 배열

단일 요소가 할당되는 경우 new(예: int* num = new int(1);)를 사용하면 메타데이터가 추가되지 않습니다. 따라서 deleteForMe(num); 호출되면 OS는 단일 int만 삭제합니다.

위 내용은 `delete[]`는 삭제하려는 배열의 크기를 어떻게 알 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.