스택의 가변 크기 배열: 프로그래밍 신화 폭로
런타임에 크기가 결정되는 배열 개념은 오랫동안 특히 C에서는 프로그래밍 금기입니다. 일반적인 통념에 따르면 상수만 자동 및 정적 배열의 크기를 정의할 수 있습니다. 그러나 최근 코드 조각은 이 개념에 도전합니다.
다음 코드를 고려하십시오.
int main(int argc, char **argv) { size_t size; cin >> size; int array[size]; ... }
new 또는 malloc과 같은 동적 메모리 할당 연산자가 없음에도 불구하고 이 코드는 없이 컴파일되고 실행됩니다. 오류. 이것이 어떻게 가능합니까?
핵심은 스택의 가변 크기 배열 지원을 도입한 C99 표준에 있습니다. 이 경우 컴파일러는 int array[100]으로 선언된 일정한 크기의 배열에서와 마찬가지로 스택에 배열을 동적으로 할당합니다.
이는 힙 할당과 근본적으로 다르다는 점에 유의하는 것이 중요합니다. malloc이나 new를 사용합니다. 특히 GCC는 스택에 배열을 할당하고 이에 따라 스택 포인터를 수정합니다. 이는 힙 할당이 필요하지 않으며 _alloca 함수의 동작과 유사합니다.
이 구성은 이전 컴파일러에서는 지원되지 않지만 최신 C 구현에서는 점점 더 널리 사용되고 있습니다. 런타임에 알려진 크기의 배열을 할당하는 편리하고 효율적인 방법을 제공합니다.
위 내용은 C의 스택에 가변 크기 배열을 할당할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!