>백엔드 개발 >C++ >C에서 `new T[]`로 할당된 배열의 크기를 결정할 수 있습니까?

C에서 `new T[]`로 할당된 배열의 크기를 결정할 수 있습니까?

DDD
DDD원래의
2024-11-08 05:39:01421검색

Can You Determine the Size of an Array Allocated with `new T[]` in C  ?

new T[]로 할당된 배열이 크기를 공개할 수 있습니까?

본질적으로 배열의 크기를 알고 있는 delete[]와는 다릅니다. 할당된 배열, C에는 new를 사용하여 생성된 배열의 크기를 프로그래밍 방식으로 확인하는 메커니즘이 부족합니다. T[].

구별 탐구

이러한 차이의 핵심은 delete[]의 본질적인 특성에 있습니다. 컴파일하는 동안 배열의 크기는 런타임이나 운영 체제의 메모리 관리자에 의해 세심하게 보존됩니다. 그러나 이 정보는 컴파일러가 액세스할 수 없는 상태로 유지됩니다. 반대로, 실제 함수가 아닌 컴파일러에 대한 피연산자인 sizeof()는 컴파일 타임에 크기가 불확실하기 때문에 동적으로 할당된 배열의 크기를 결정할 수 없습니다.

예시

이 코드 샘플을 고려해보세요.

int *arr = new int[256];
int *p = &arr[100];
printf("Size: %d\n", sizeof(p));

여기서 컴파일러는 다음과 같은 문제에 직면합니다. 난처한 딜레마: p의 크기를 결정하는 방법. 배열의 포인터에는 할당된 메모리 블록의 시작이나 끝에 대한 고유한 지식이 부족합니다. 이는 블록의 시작, 블록 내의 특정 요소 또는 심지어 임의의 위치를 ​​나타낼 수 있습니다.

내재된 제한

C 및 C 배열은 일류와 달리 객체는 포인터로 변질됩니다. 포인터가 새 블록의 시작, 개별 개체 또는 중간 주소를 식별하는지 컴파일러와 프로그램은 모두 인식하지 못합니다.

이 디자인 선택은 C 및 C의 메모리 관리 위임 특성에서 비롯됩니다. 프로그래머와 운영 체제에 전달됩니다. 신규 구현과 삭제 구현은 플랫폼과 시나리오에 따라 크게 다르므로 C 표준 내 표준화는 불가능합니다.

위 내용은 C에서 `new T[]`로 할당된 배열의 크기를 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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