C/C++ 프로세스 맵

2862 단어 cppc
우리 대부분은 C/C++로 프로그래밍 언어를 배우기 시작합니다. C는 현대 프로그래밍 언어의 할아버지로 간주되며 그 중 일부는 뒤에서 c에서 실행되고 있습니다.
C로 첫 번째 'hello world!' 프로그램을 작성했을 때의 흥분을 기억하세요. 확실히 이것은 훌륭한 경험이었습니다. 그러나 c 프로그램을 컴파일하고 실행하면 정확히 어떤 일이 발생합니까?

편집:
c 프로그램을 컴파일할 때 컴파일러는 소스 코드 파일을 컴파일하고 이 바이너리 코드가 파일Hello.o 또는 Hello.obj에 포함된 바이너리 코드를 출력합니다.



이 후linker 소스 코드 파일의 바이너리 코드와 라이브러리에 포함된 바이너리 코드를 연결한다. 성공적으로 연결되면 링커는 이름이 Hello.exe 인 프로그램을 출력합니다. 그런 다음 프로그램이 디스크에 저장됩니다.



운영:
이제 이 프로그램을 실행할 때. OS 로더는 실행을 위해 프로그램을 RAM에 로드합니다. 이제 이 프로그램은 프로세스가 되었습니다. 프로세스는 실행 중인 프로그램입니다.

프로세스 맵이란 무엇입니까?
프로세스에는 5개의 메모리 세그먼트 DATA, BSS, CODE 또는 TEXT, HEAP 및 STACK이 있으며 이를 총칭하여 PROCESS MAP이라고 합니다.



개별 메모리 세그먼트의 사용을 이해하려면 다음 코드를 고려하십시오.



DATA 세그먼트: NON-ZERO 값으로 초기화된 모든 정적 및 전역 변수가 여기에 있습니다. 위의 코드 데이터 세그먼트에서 다음이 포함됩니다.

int g_b = 5 and static int z = 2


BSS(Block Started By Symbol) : ZERO로 초기화된 모든 정적 및 전역 변수가 여기에 있습니다. 위의 코드에서 BSS 세그먼트에는 다음이 포함됩니다.

int g_a and static int d=0


여기서 우리는 g_a의 값을 0으로 지정하지 않았습니다. 그러면 g_a가 BSS에 어떻게 들어왔습니까? 아래에 답을 적어 두십시오.

CODE/TEXT : 코드에서 사용한 모든 함수의 이진 코드가 여기에 있습니다.add() , main()printf() 함수의 이진 코드를 포함합니다.

HEAP : 힙은 동적 메모리 할당에 사용됩니다. 위의 코드에서 우리는 동적 메모리 할당을 하지 않았기 때문에 우리의 경우에는 힙 메모리가 비어 있습니다.

STACK : 현재 실행 중인 함수의 스택 프레임을 포함합니다. stackframe은 함수 실행 중에 필요한 모든 정보를 보유하는 구조입니다. stackframe에는 다음과 같은 네 부분이 있습니다.



스택 프레임은 함수가 호출될 때 생성되고 각 함수의 스택 프레임이 스택에 푸시됩니다. 위 코드에는 세 개의 함수가 있으므로 프로그램 실행 중에 세 개의 스택 프레임이 생성됩니다.

이런 식으로 C 프로그램이 컴파일되고 실행되며 실행 후 프로세스 맵은 다음과 같습니다.

좋은 웹페이지 즐겨찾기