수명Lifetime

"수명"은 변수나 함수가 존재하는 프로그램 실행 중의 기간입니다."Lifetime" is the period during execution of a program in which a variable or function exists. 식별자의 저장 기간에 따라 수명이 결정됩니다.The storage duration of the identifier determines its lifetime.

storage-class-specifier static을 사용하여 선언된 식별자에는 정적 저장 기간이 있습니다.An identifier declared with the storage-class-specifier static has static storage duration. 정적 저장 기간("전역"이라고도 함)이 있는 식별자는 프로그램의 실행 기간 동안 저장소와 정의된 값을 갖습니다.Identifiers with static storage duration (also called "global") have storage and a defined value for the duration of a program. 프로그램 시작 전에 저장소가 예약되고 식별자의 저장된 값이 한 번만 초기화됩니다.Storage is reserved and the identifier's stored value is initialized only once, before program startup. 외부 또는 내부 링크를 사용하여 선언된 식별자에도 정적 저장 기간이 있습니다(링크 참조).An identifier declared with external or internal linkage also has static storage duration (see Linkage).

static 저장소 클래스 지정자 없이 선언된 식별자는 함수 내에서 선언되는 경우 자동 저장 기간을 갖게 됩니다.An identifier declared without the static storage-class specifier has automatic storage duration if it is declared inside a function. 자동 저장 기간이 있는 식별자("로컬 식별자")는 해당 식별자가 정의되거나 선언된 블록 내에서만 저장소와 정의된 값을 갖습니다.An identifier with automatic storage duration (a "local identifier") has storage and a defined value only within the block where the identifier is defined or declared. 자동 식별자의 경우 프로그램이 해당 블록에 진입할 때마다 새 저장소가 할당되고 프로그램이 해당 블록을 나갈 때 저장소 및 값이 손실됩니다.An automatic identifier is allocated new storage each time the program enters that block, and it loses its storage (and its value) when the program exits the block. 링크 없이 함수에서 선언된 식별자에도 자동 저장 기간이 있습니다.Identifiers declared in a function with no linkage also have automatic storage duration.

다음 규칙은 식별자에 전역(정적) 수명이 있는지 아니면 로컬(자동) 수명이 있는지를 지정합니다.The following rules specify whether an identifier has global (static) or local (automatic) lifetime:

  • 모든 함수는 정적 수명을 갖고 있으므로All functions have static lifetime. 프로그램 실행 중에 항상 존재합니다.Therefore they exist at all times during program execution. 외부 수준(즉, 함수 정의와 동일한 수준에 있는 프로그램의 모든 블록 외부)에서 선언된 식별자에는 항상 전역(정적) 수명이 있습니다.Identifiers declared at the external level (that is, outside all blocks in the program at the same level of function definitions) always have global (static) lifetimes.

  • 지역 변수는 이니셜라이저가 있는 경우 static으로 선언되지 않는 한 만들어질 때마다 초기화됩니다.If a local variable has an initializer, the variable is initialized each time it is created (unless it is declared as static). 함수 매개 변수에도 로컬 수명이 있습니다.Function parameters also have local lifetime. static 저장소 클래스 지정자를 선언에 포함하여 블록 내에서 식별자에 대한 전역 수명을 지정할 수 있습니다.You can specify global lifetime for an identifier within a block by including the static storage-class specifier in its declaration. static으로 선언된 변수는 블록에 한 번 진입한 후 다음에 진입할 때까지 값을 유지합니다.Once declared static, the variable retains its value from one entry of the block to the next.

    전역 수명이 있는 식별자(예: 외부에서 선언된 변수 또는 static 키워드를 사용하여 선언된 지역 변수)가 소스 프로그램이 실행되는 동안 계속 존재하지만 프로그램의 일부 부분에서 표시되지 않을 수 있습니다.Although an identifier with a global lifetime exists throughout the execution of the source program (for example, an externally declared variable or a local variable declared with the static keyword), it may not be visible in all parts of the program. 표시 유형에 대한 자세한 내용은 범위 및 표시 유형을 참조하고, 저장소 클래스 지정자 비터미널에 대한 설명은 저장소 클래스를 참조하세요.See Scope and Visibility for information about visibility, and see Storage Classes for a discussion of the storage-class-specifier nonterminal.

    메모리는 malloc 등의 특수 라이브러리 루틴을 사용하여 만들어지는 경우 필요에 따라(동적) 할당될 수 있습니다.Memory can be allocated as needed (dynamic) if created through the use of special library routines such as malloc. 동적 메모리 할당은 라이브러리 루틴을 사용하므로 언어의 일부로 간주되지 않습니다.Since dynamic memory allocation uses library routines, it is not considered part of the language. 런타임 라이브러리 참조에서 malloc 함수를 참조하세요.See the malloc function in the Run-Time Library Reference.

참고 항목See Also

수명, 범위, 표시 유형 및 링크Lifetime, Scope, Visibility, and Linkage