> 백엔드 개발 > C++ > C의 스택에 가변 크기 배열을 할당할 수 있습니까?

C의 스택에 가변 크기 배열을 할당할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-28 00:10:08
원래의
798명이 탐색했습니다.

Can Variable-Sized Arrays Be Allocated on the Stack in C  ?

스택의 가변 크기 배열: 프로그래밍 신화 폭로

런타임에 크기가 결정되는 배열 개념은 오랫동안 특히 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿