최근 며칠 동안 독자 중 일부는 C 런타임 스택의 아주 좋은 예를 발견했다고 우리와 함께 사용했습니다.
승인됨: Fortect
에 맞서.
이 튜토리얼에서는 C 타임아웃 로드를 예시로 설명합니다.
“실행 스택”이 무엇인지, 어떻게 항상 충분한 시간에 하나씩 사용되는지 정의하여 기본적으로 “실행 스택”의 맨 아래에 성공적으로 도달하기 위해 세부 정보를 살펴보겠습니다. 그래서! 그에게 대학 시절의 기억을 떠올리게 하려고 하면 일반적으로 우리가 배운 스택의 개념이 뒤에 있는 것으로 간주된다는 것을 알 수 있습니다. 함수에 로컬로 남아 있는 변수, 결과를 전달하기 위해 전달된 인수, 반환된 정보 등을 임시로 저장합니다. 그리고 일반적으로 기능이 완료되면 해당 배터리가 제거됩니다. 물론 제 말이 맞습니다! 아직 끝나지 않았습니다!
Linux 및 Unix 시스템에서 컴파일하는 거의 모든 C 프로그램의 표준 개체인 “a.out”부터 시작하겠습니다! 이 파일링은 ELF(실행 및 바인딩 형식), COFF(공통 개체 파일 형식) 또는 단순히 “a.out” 데이터 형식일 수 있습니다. 이러한 파일 형식은 서로 다른 형식이지만 항상 하나의 편리한 “세그먼트 개념”이 있습니다! 세그먼트는 어떤 이유로든 적합한 “기호 테이블”의 항목에 대한 거의 모든 특정 유형의 메시지를 포함하는 이진 파일 “a.out”의 위치입니다. 각 세그먼트에는 개별 섹션이 있을 수 있습니다. 섹션은 ELF 데이터 파일에서 가장 컴팩트한 조직 아파트입니다. 바이너리와 관련된 요소들로 구성된 각 세그먼트!
특정 타임라인 실행 스택을 따라 메모리가 낭비됩니다. C에서 중요한 거대한 함수를 호출하면 해당 활성화 레코드, any is, 매개변수가 실행 파일에 푸시되고 함수가 완료되면 활성화 파일이 임시 스택에서 제거됩니다. .
간단한 “hello world” 프로그램을 작성하고 실행하여 실행 파일에서 “size” 명령을 실행하여 “a.out”이 어떤 다른 세그먼트는 얼마나 많은 공간을 소비하고 있습니다.
이것은 비어 있기 때문에 텍스트 세그먼트에는 1144바이트가 필요하고 데이터 세그먼트에는 492바이트가 필요합니다. bss 세그먼트는 2007 바이트입니다! 컴파일러 프로그램 외에 전역 또는 고정 프로그램 또는 전역 또는 초기화되지 않은 컴파일러를 추가로 포함하고 크기를 조작하여 대부분의 연산자 유형이 해당 유형에 속하는지 확인하여 위의 프로그램을 실험할 수 있다는 점에 유의하십시오. 5월 세그먼트! 예를 들어
텍스트 세그먼트는 변경되지 않은 반면 데이터 구성 요소는 전 세계적으로 최대 2개까지 변경되었으며 영구적으로 초기화된 명령으로 변경되었습니다. 마찬가지로, C 프로그램의 어떤 훈련이 실행 파일의 많은 부분으로 이동하는지 등 관심 있는 몇 가지 중요한 테스트를 트로트할 수 있습니다!
다음 그림은 “a.out” 파일의 웹 템플릿에 연결된 개별 모듈에 해당하는 새로운 C 프로그램의 지침을 보여줍니다.
주 함수에서 선언된 로컬 조건이 “a.out” 파일과 일치하지 않는다는 점에 유의하십시오. 대신 도구가 실행될 때 런타임에 생성됩니다. 또한 초기화되지 않은 국제 및 고정 데이터는 BSS에 해당합니다. Bss는 “Block Started because of Symbol”의 좋은 줄임말입니다. 데이터 세그먼트와 달리 BSS 요소에는 초기화되지 않은 데이터 이미지가 없으며 런타임에 얻은 디스크 공간의 양만 유지합니다. 텍스트 세그먼트에는 프로그램의 C 언어로 된 exe 문이 포함되어 있습니다.
예시 C++의 스택에서?
스택은 요소로 인해 컬렉션을 포함하는 1개의 추상 데이터 구조입니다. 스택은 LIFO 시스템을 구현하는데, 끝의 타입으로 밀려나는 요소가 먼저 제거되는 경우가 많다. 마지막으로 C++ 예제를 통해 스택 | C++ 서비스 및 스택 알고리즘이 완료되었습니다.
여러분, C 프로그램의 명령문이 컴파일된 후 현재 실행 파일의 다른 세그먼트에 해당하는 것을 눈에 띄게 보았습니다. 나와 내 배우자가 알고 있듯이 메서드가 실행될 때 해당 메서드와 관련하여 할당된 자체 메모리 공간에서도 실행됩니다. 일반적으로 이 실행 파일은 실행 기술의 주소 공간에 삭제해야 합니다. 그러나 어떻게 이런 일이 발생합니까? 다음 사람은 누구입니까? 이것은 그림에서 링커 또는 부트스트랩이 나타나는 곳입니다. 자동차! 사실, 대부분의 사람들이 모든 것을 합니다! 방법을 볼까요?
“a.out” 파일의 세그먼트는 런타임 링커가 동시에 로드하는 개체에 편리하게 계획됩니다! 로더는 이미지와 유사한 거의 하나의 세그먼트를 파일로 가져오고 이를 메모리에 직접 투자하기도 합니다. 세그먼트는 실제로 실행 중인 프로그램에서 각각 특정 목적의 메모리가 됩니다.
처음에 C에서 런타임 시스템의 역할은?
빈 공유를 지원하는 C 및 이후 언어에서 런타임 시스템에는 프로그램의 메모리 풀을 관리하는 디렉토리 목록도 포함되어 있습니다. 객체 지향 프로그래밍 언어에서 런타임 엔진은 종종 동적 분류를 확인하고 공식 참조를 확인하는 역할을 했습니다.
다음 그림은 “a.out” 이외의 클립이 메모리에 어떻게 구성되어 있는지 보여줍니다.
텍스트에는 응용 프로그램의 지침이 포함되어 있습니다. 로더는 이를 활용 메모리에서 일반적으로 기본 “mmap()” 시스템에 연결된 시스템으로 직접 복사하고 프로그램 코드가 일반적으로 가치 있는 내용이나 크기를 확실히 변경하기 때문에 상황에 다시는 신경 쓰지 않습니다.
전체 프로그램이 생성되는 동안 실행 스택은 일종의 일치 함수에 대한 현재 호출 각각에 대한 꽤 중요한 이해를 저장합니다. 함수가 호출될 때마다나는 지금 프로그램 실행 중입니다. 저장: 반환 값(있는 경우)
초기화된 데이터 세그먼트에는 철학이 할당된 전역 및 비활성 변수가 포함됩니다. BSS 조각 크기는 이제 실행 가능한 롯지에서 가져오고 전체 로더는 이 크기에 대한 블록을 수신하여 중요한 정보 세그먼트 바로 뒤에 배치합니다. 이 섹션은 I’m in the program을 삽입할 때 미래에서와 같이 즉시 삭제됩니다. ™ 포인트 부분. 전체 데이터 링크 이전, BSS 세그먼트는 이 시점에서 데이터 세그먼트라는 관점에서 일반적으로 참조됩니다. 실제로 운영 체제 메모리 관리 관점에서 보면 일부는 단순히 순차적 가상의 집합으로 구성되어 있으므로 다음 세그먼트가 연결됩니다. 중요한 정보 세그먼트는 일반적으로 거의 모든 프로세스에 있는 가장 큰 세그먼트여야 합니다!
이제 town 변수, 함수 호출을 전달하는 매개변수, 복제된 주소, 임시 주소 등이 유지되는 방식을 살펴보겠습니다. 따라서 스택 세그먼트 유형에 대한 자리 표시자가 여전히 필요합니다! 힙 할당을 위해 파일이 필요할 수도 있습니다. 이것은 종종 처음으로 malloc()이 호출될 때 설정됩니다.
런타임 컬렉션은 하드 드라이브로/에서 값을 전송/반환하는 데 사용됩니다. 함수에 인수를 전달할 때 모델의 경우 함수에서 값을 반환할 때 실행 스택이 필요합니다. 유형에서 이해할 수 있다면 함수에서 참조로 전달된 요소는 귀중한 값을 변경하기 위해 조작된 것으로 쉽게 식별됩니다.
그림과 같은 형태로 참고하세요. , 방 주소의 하위 요소가 표시되지 않음을 알 수 있습니다. 즉, 다양한 전술 주소 공간에 있지만 물리적 처리가 없으므로 참조하는 것은 불법입니다! 이것은 매우 일반적으로 몇 킬로바이트의 메모리로 시작하는 걱정거리가 0입니다. 정수 값을 갖는 A 널 포인터 등을 사용하여 메모리를 통한 참조를 가로챕니다. 이
잠시 후, 프로그램은 확실히 메모리에 있고 실행될 것입니다. 이제 C가 실행 중인 프로그램의 데이터 안경을 구성하는 방법을 살펴보겠습니다. 몇 가지 재생 데이터 구조가 있습니다: 스택, 레코드, 활성화 힙 및 실제로 켜짐. 이것은 많은 사람들이 “세그먼트를 쌓는” 곳이라는 것을 기억하십시오…
스택 세그먼트는 스택이라는 고유한 데이터 구조를 사용합니다. 콜백 요구 LIFO의 경우 후입선출(Last In-First Out)의 경우 우리는 이미 고전적인 통신 방식, 무리가 작동하는 방식을 알고 있습니다. 스택에서 두 가지 분류 작업이 수행됩니다. 다른 POP가 장소의 맨 위에서 항목을 소다하는 동안 스택에 무언가를 밀어 넣습니다. PUSH 연산은 스택을 증가시킵니다.
승인됨: Fortect
Fortect은 세계에서 가장 인기 있고 효과적인 PC 수리 도구입니다. 수백만 명의 사람들이 시스템을 빠르고 원활하며 오류 없이 실행하도록 신뢰합니다. 간단한 사용자 인터페이스와 강력한 검색 엔진을 갖춘 Fortect은 시스템 불안정 및 보안 문제부터 메모리 관리 및 성능 병목 현상에 이르기까지 광범위한 Windows 문제를 빠르게 찾아 수정합니다.
함수는 매개변수(전역 포인터 가능)를 사용하여 호출자를 찾기 위해 시장 변수에 액세스할 수 있습니다. 런타임은 종종 조인에서 한 번 SP(스택 포인터)라고 하는 절을 유지 관리합니다. 이 절은 특히 스택의 현재 소수라고 부를 수 있는 항목을 나타냅니다. eu에 연결된 전체 로드 세그먼트가 있습니다. 세 가지 주요 용도가 있습니다. 그 중 두 가지는 기능적으로 손상되고 마지막은 표현식 평가에만 사용됩니다.
1. 스택은 로컬 변수의 저장을 제공합니다.
지금 이 간단한 다운로드로 컴퓨터 성능을 높이십시오. 년런타임 스택의 장점은 무엇입니까?
좋은 스택이란 무엇이며 무엇 런타임 스택은 C에서 실행됩니까?
실제 런타임 스택 작동 방식 ?