source

할당 배열 VS 가변 길이 배열

nicesource 2023. 10. 31. 22:24
반응형

할당 배열 VS 가변 길이 배열

메모리를 배열에 할당하는 방법은 두 가지가 있으며, 그 중 처음에는 크기를 알 수 없습니다.가장 일반적인 방법은malloc이것처럼.

int * array;
... // when we know the size
array = malloc(size*sizeof(int));

하지만 크기를 알고 난 후에 배열을 정의하는 것은 C99에서도 유효합니다.

... // when we know the size
int array[size];

그들은 완전히 똑같습니까?

아니요, 완전히 똑같지는 않습니다.두 개체 모두 동일한 개체 수와 유형을 저장할 수 있지만, 다음 사항에 유의해야 합니다.

  • 넌 할 수 있다.free()배열이 분산되어 있지만, 당신은 할 수 없습니다.free()가변 길이 배열(범위를 벗어나서 엔클로저 블록이 남아 있으면 더 이상 존재하지 않음).기술 용어에서는 malloc에 할당하는 것과 가변 길이 배열에 자동으로 할당하는 것으로 저장 기간이 다릅니다.
  • C는 스택의 개념이 없지만 많은 구현이 스택에서 가변 길이 배열을 할당하는 반면malloc에서 할당합니다.이것은 스택 크기가 kB 정도인 반면 힙은 훨씬 더 큰 많은 임베디드 운영 체제와 같은 스택 제한 시스템의 문제입니다.
  • 또한 다음을 사용하여 실패한 할당을 테스트하는 것이 더 쉽습니다.malloc가변 길이 배열을 사용하는 것 보다.
  • 할당된 메모리는 다음과 같이 크기를 변경할 수 있습니다.realloc(), VLA는 할 수 없지만(더 정확하게는 블록을 다른 배열 차원으로 다시 실행하여 이전 콘텐츠를 손실합니다).
  • 호스트형 C89 구현은 다음을 지원합니다.malloc().
  • 호스트형 C11 구현은 가변 길이 배열을 지원하지 않을 수 있음(그러면 다음을 정의해야 함)__STDC_NO_VLA__C116.10.8.3)에 따른 정수 1로서.
  • 제가 놓쳤던 다른 모든 것 :-)

언급URL : https://stackoverflow.com/questions/16672322/malloced-array-vs-variable-length-array

반응형