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 중국어 웹사이트의 기타 관련 기사를 참조하세요!