반응형
할당 배열 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
반응형
'source' 카테고리의 다른 글
고유성 제약 조건을 조건부로 적용할 수 있습니까? (0) | 2023.11.05 |
---|---|
내 html 페이지에 각도 변수 표시 (0) | 2023.10.31 |
부트스트랩 모달이 열린 상태에서 신체 내용의 스크롤 방지 방법 (0) | 2023.10.31 |
사용자의 현지 시간에서 2시간을 빼는 방법은? (0) | 2023.10.31 |
트랜잭션당 개별 행 데이터 타임 스탬프로 정의된 일정 기간 동안의 트랜잭션을 카운트하는 방법 (0) | 2023.10.31 |