수명
"수명"은 변수나 함수가 존재하는 프로그램 실행 중의 기간입니다. 식별자의 스토리지 기간에 따라 수명이 결정됩니다.
storage-class-specifierstatic
을 사용하여 선언된 식별자에는 정적 스토리지 기간이 있습니다. 정적 스토리지 기간("글로벌"이라고도 함)이 있는 식별자는 프로그램의 실행 기간 동안 스토리지와 정의된 값을 갖습니다. 프로그램 시작 전에 스토리지가 예약되고 식별자의 저장된 값이 한 번만 초기화됩니다. 외부 또는 내부 링크를 사용하여 선언된 식별자에도 정적 스토리지 기간이 있습니다(링크 참조).
static
스토리지 클래스 지정자 없이 선언된 식별자는 함수 내에서 선언되는 경우 자동 스토리지 기간을 갖게 됩니다. 자동 스토리지 기간이 있는 식별자("로컬 식별자")는 해당 식별자가 정의되거나 선언된 블록 내에서만 스토리지와 정의된 값을 갖습니다. 자동 식별자의 경우 프로그램이 해당 블록에 진입할 때마다 새 스토리지가 할당되고 프로그램이 해당 블록을 나갈 때 스토리지 및 값이 손실됩니다. 링크 없이 함수에서 선언된 식별자에도 자동 스토리지 기간이 있습니다.
다음 규칙은 식별자에 전역(정적) 수명이 있는지 아니면 로컬(자동) 수명이 있는지를 지정합니다.
모든 함수는 정적 수명을 갖고 있으므로 프로그램 실행 중에 항상 존재합니다. 외부 수준(즉, 함수 정의와 동일한 수준에 있는 프로그램의 모든 블록 외부)에서 선언된 식별자에는 항상 전역(정적) 수명이 있습니다.
지역 변수는 이니셜라이저가 있는 경우
static
으로 선언되지 않는 한 만들어질 때마다 초기화됩니다. 함수 매개 변수에도 로컬 수명이 있습니다.static
스토리지 클래스 지정자를 선언에 포함하여 블록 내에서 식별자에 대한 글로벌 수명을 지정할 수 있습니다.static
으로 선언된 변수는 블록에 한 번 진입한 후 다음에 진입할 때까지 값을 유지합니다.
전역 수명이 있는 식별자(예: 외부에서 선언된 변수 또는 static
키워드를 사용하여 선언된 지역 변수)가 소스 프로그램이 실행되는 동안 계속 존재하지만 프로그램의 일부 부분에서 표시되지 않을 수 있습니다. 표시 유형에 대한 자세한 내용은 범위 및 표시 유형을 참조하고, 스토리지 클래스 지정자 비터미널에 대한 설명은 스토리지 클래스를 참조하세요.
메모리는 malloc
등의 특수 라이브러리 루틴을 사용하여 만들어지는 경우 필요에 따라(동적) 할당될 수 있습니다. 동적 메모리 할당은 라이브러리 루틴을 사용하므로 언어의 일부로 간주되지 않습니다. 런타임 라이브러리 참조에서 malloc 함수를 참조하세요.
참조
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기