배열과 함께 배열의 길이를 명시 적으로 저장하지 않는 이유는 무엇입니까 C
?
내가 보는 방식으로, 그렇게해야 할 압도적 인 이유 가 있지만 표준 (C89)을 지원하는 것은별로 많지 않습니다. 예를 들어 :
- 버퍼에 길이가 있으면 버퍼 오버런을 방지 할 수 있습니다.
- Java 스타일
arr.length
은 명확하며 프로그래머int
가 여러 배열을 처리하는 경우 스택에서 많은 수를 유지하지 않아도 됩니다. - 기능 매개 변수가 더욱 강력 해집니다.
그러나 아마도 가장 동기 부여가되는 이유는 일반적으로 길이를 유지하지 않고 공간이 절약되지 않기 때문입니다. 대부분의 어레이 사용에는 동적 할당이 포함된다고 말하고 싶습니다. 사실, 사람들이 스택에 할당 된 배열을 사용하는 경우가있을 수 있지만, 이는 한 번의 함수 호출 *입니다. 스택은 4 또는 8 바이트를 추가로 처리 할 수 있습니다.
힙 관리자는 어쨌든 동적으로 할당 된 배열에 의해 사용 된 여유 블록 크기를 추적해야하기 때문에 해당 정보를 사용 가능하게 만들고 컴파일 타임에 검사 한 추가 규칙을 추가하여 길이를 명시 적으로 조작 할 수없는 경우 발로 자신을 촬영하는 것을 좋아합니다).
다른 측면에서 생각할 수있는 유일한 것은 길이 추적으로 컴파일러를 더 단순하게 만들지 않았지만 그렇게 간단 하지는 않다는 것입니다.
* 기술적으로는 자동 저장 장치가있는 배열로 일종의 재귀 함수를 작성할 수 있으며, 길이를 저장하는이 (매우 정교한) 경우 실제로 더 많은 공간 사용이 발생할 수 있습니다.
malloc()
ed 영역 의 크기를 휴대용 방식으로 요청할 수없는 이유는 무엇 입니까?" 그것은 여러 번 궁금해하는 것입니다.