C 프로그램의 메모리 레이아웃이 텍스트, 힙, 스택, 데이터 및 bss 세그먼트로 나누어 져 있다는 것을 알고 있습니다. 나는이 메모리 레이아웃 만이 다른 스토리지 클래스의 변수 범위와 수명을 유지하는 이유라고 생각한다.C의 메모리 레이아웃의 각 세그먼트에 어떤 데이터 구조가 있습니까?
예를 들어, 자동 변수가 스택에 저장됩니다. 함수 호출이 발생할 때마다 호출 된 함수의 자동 변수에 대한 액세스를 제한하는 새 스택 프레임이 만들어집니다. 그러나 그들은 여전히 관련 프레임 안에 있으며 호출 된 함수가 제어를 반환하자마자 조치를 취합니다.
따라서 우리는 자동 변수의 범위와 유효 기간을 정당화 할 수 있습니다. 그러나 이러한 범위 지정을 유지하기 위해 다른 세그먼트 (즉, 데이터, bss 및 힙)에서 어떤 데이터 구조가 사용되는지 알고 싶습니다. 아니면 범위와 수명을 제어하는 메모리 레이아웃이 아닌 다른 것입니까?
일부 표준 구현 시맨틱과 특정 구현의 세부 사항을 혼동하는 것은 잠재적 인 함정입니다. 귀하의 질문을 조금 명확히 할 수 있습니까? 여기서 정말로 무엇을 이해하려고합니까? –
@Carl이 말한 것에 대해 자세히 설명하려면 다음 인용문을 사용하십시오. * "자동 변수는 스택에 저장됩니다."* 물론 그렇습니다. 내가 알고있는 모든 구현에서 자동 저장 기간을 갖는 변수는 스택 구조에 할당됩니다. 그러나 C * 언어 *는 스택에 아무 것도 말하지 않습니다. 그것들은 다른 방법으로 구현 될 수 있습니다. 스택은 단지 좋은 것입니다. –
** "스코프와 수명을 제어하는 메모리 레이아웃이 아닌 다른 것입니까?"** 컴파일러는 스코프가 표준을 준수하도록 끝난 후에 auto 변수를 파괴하는 호출을 내장 할 수 있습니다. 그러나 우리에게 표준은 표준이 그렇게 말할 때 언제 어디에서 끝나는 지 보증합니다. –