C와 C++의 맥락에서 활성화 기록은 무엇인가?
C/C++ 프로그래머에게 그것은 무엇을 의미하며 그것에 대해 아는 것이 얼마나 중요한가?
적어도 개념적으로는 플랫폼 전반에 걸쳐 동일한가?
함수에 의해 로컬 변수를 저장하는 데 사용되는 할당된 메모리 블록으로 이해한다...
나는 더 알고 싶다
활성화 레코드는 스택 프레임의 다른 이름이다.콜 스택을 구성하는 것은 데이터 구조 입니다.일반적으로 다음과 같이 구성된다.
- 지역 주민들
- 발신자에게 주소 반환
- 칼리어의 매개변수
- 이전 스택 포인터(SP) 값
따라서 콜 스택은 새로운 서브루틴이 추가될 때 스택에 추가되고, 반환될 때 스택에서 제거되는 모든 활성화 레코드로 구성된다.
요소의 실제 구조와 순서는 플랫폼이며 심지어 구현이 정의된다.
C/C++ 프로그래머의 경우, 이 구조에 대한 일반적인 지식은 Call Convention과 같은 특정 구현 특징과 심지어 버퍼 오버플로가 제3자의 악성 코드를 실행할 수 있게 하는 이유까지 이해하는데 유용하다.
좀 더 친밀한 지식은 위의 개념을 더 발전시킬 것이고 또한 디버거나 디버깅 기호가 없어도 프로그래머가 그들의 응용 프로그램을 디버깅하고 메모리 덤프를 읽을 수 있게 할 것이다.
그러나 더 일반적으로, C/C++ 프로그래머는 통화 스택에 대해 생각할 겨를도 없이 취미 생활 프로그래밍 경력의 많은 부분을 할 수 있다.
활성화 기록은 C나 C++ 랭고즈 자체에 대해 말하는 데 많이 쓰이는 개념이 아니다.활성화 레코드의 형식은 플랫폼마다 매우 다르다.
개념적으로 매개변수가 어떻게 전달되는지, 함수가 복귀하는 지역 변수의 수명 및 예상 던짐에 대한 응답으로 통화 스택이 해제되는 방법은 모두 C++와 (후자 C를 제외하고)의 중요한 부분이다.이러한 것들이 어떻게 구현되는지에 대한 세부사항은 특정 플랫폼의 활성화 레코드가 어떻게 보이는지에 영향을 미치겠지만, C+ 또는 C로 코드를 작성하기 위해서는 일반적으로 이에 대한 지식이 필요하지 않다.
기능이라고 부를 때는 호출자와 캘리어의 컨텍스트를 저장할 곳이 필요한데, 이 곳을 활성화 레코드(AKA 스택 프레임)라고 한다.
그렇다, 활성화 레코드는 통화 스택을 구성하지만, 그렇다고 활성화 레코드가 스택 기반이어야 하는 것은 아니다.그것은 구체적인 실행이다.
당신은 "어떤 예시라도?"라고 의아해 할 것이다.
- 물론, IBM 메인프레임의 스택 없는 설계를 보면, 스택은 사용할 수 없으며, 활성화 기록은 힙 기반이다.
- 반대로 힙(AKA 힙리스)을 제공하지 않는 플랫폼(예: 아두이노(Aka 힙리스)도 있다.
- 하드웨어 제한과는 별도로 일부 기능 언어에서는 로컬 변수를 스택에 저장할 수 없으므로 활성화 레코드가 힙에 할당되므로 이유가 궁금하다면 여기에 좋은 참조가 있다.
@Frak처럼HB는 힙과 스택뿐만 아니라 메모리의 다른 영역도 활성화 레코드가 될 수 있다고 말했다. 이것이 구현의 구체적인 의미인 것이다.
활성화 기록에는 다음과 같은 세 가지가 포함되어 있다.
.기능 정의
변수적 정의
.기능적용(기능 호출)
참조URL: https://stackoverflow.com/questions/1266233/what-is-activation-record-in-the-context-of-c-and-c
'Programing' 카테고리의 다른 글
v-data-table을 사용 가능한 모든 공간에 수직으로 설치하는 방법 (0) | 2022.04.17 |
---|---|
"#define _GNU_SOURCE"는 무엇을 의미하나? (0) | 2022.04.17 |
$store 객체를 사용하여 Vuex 하위 모듈 내부 상태에 액세스 (0) | 2022.04.17 |
VueJS에서 애니메이션에 jQuery를 계속 사용해야 하는가? (0) | 2022.04.16 |
Vue.js - 이 간단한 예에서 중첩된 구성 요소를 렌더링하는 방법? (0) | 2022.04.16 |