5- C ++ 가상 메모리 영역 (4)의 메모리 관리 구조도

 

 

 

 

 

  우리는 종종, 32 비트 시스템은 각 프로세스에 대해 4G 가상 메모리 공간을 할당 (및 MMU는 실제 메모리의 물리적 메모리에이 두 4G 가상 메모리 매핑에 대한 책임), 사실, 만 0 ~ 3G 정말 완전히 자체를 처리하는 것을 말한다 우리는 사용자 영역 전화, 그것은 우리가 핵심 영역을 부르는 모든 프로세스가 공유 3 ~ 4G 1G를, 우리의 프로그램은 직접 커널 영역에 액세스 할 수 없습니다.

 

 

#INCLUDE <STDIO.H> INT 들 a     // 초기화 전체 영역 .bss라고 INT의 B의 = . 1 ;     // 초기화 전체 영역 .DATA 정적 INT C = 2 ]     // 초기화 전체 영역 .DATA CONST INT D = . (3) ;     // 읽기 전용 데이터 세그먼트라고도 리터럴 상수 영역 ro.data를, D의 값은 변경 될 수 없다 INT 본체 ( 무효 ) 
{ INT E = . 4 ;     // 스택 영역 정적 하는 int F = 5. ;     // 초기화 전체 영역 CONST INT G = 6. ;    
 


 
 

    
     
     // 스택 영역, 변수 이름은 그 값을 변경할 수 있지만,이 값은 그 어드레스가 변경된다 
    INT p는의 malloc (= * sizeof의 ( INT ))     // 스택 영역 내의 포인터 변수 (P)를, 그러나 공간의 4 바이트를 가리키는 힙에서 
    숯불 * STR = " ABCD " ;     // 문자열은 시작 어드레스 "abcd와"불변 영역 본 텍스트, 저장된 스택 포인터 변수 영역 STR "abcd와" 
    복귀  0 ; 
}

 

  사용 지역 소재 말 : "글로벌 변수는 공간을 할당, 컴파일시 런타임 유통 공간에서 지역 변수"통합 개발 도구 대처럼, 우리는 직접 "실행"을 지적하는 간단한 프로그램을 작성 이해하기 쉽게, 한 번에 실행, 컴파일하지만, 쓰기 코드에 정력이, GCC 컴파일러를 사용하여 실행 파일의 a.out 생성하는 경우, 다음 ./a.out, 리눅스에 사실 만 "실행"이 단계를 실행, 컴파일시에 그 할당은 어떻게 설명 하는가?

  사실, 단지 컴파일 시간은 가상 주소 전역 변수 (정적 지역 변수가 고려 될 수있다)을 결정하고, 관련 정보는 실행 파일 a.out의 존재합니다. 우리는 네 가지 상태에 대한 프로세스 (실행중인 실행 파일) 토론 : (CPU를 포기 CPU가 아닌 다른 자원 대기)> 보류 - - -> 실행 (점유 CPU) 준비 (대기 CPU를)> 종료 또한 : 자주 장소와 관련된 준비 단계, 과정의 초기 상태는 전역 변수에 할당 된 가상 주소 공간에서 물리적 주소를 매핑되어 하나의 준비 작업, 많이, 국가의 초기 단계에서 않은, 그리고 좋은 초기화합니다. 그래서 main () 함수 전에 프로그램에서 전역 변수를 입력이, 그 적용을위한 공간을 할당하기 시작, 그것은 문에 메모리, 지역 변수 및 힙 변수에만 프로그램 실행에 존재하고 (또는 정의) 성명을 . 

 

참고 블로그 :

  https://blog.csdn.net/m0_37829435/article/details/81158960

추천

출처www.cnblogs.com/icmzn/p/11824802.html