C / C++

프로세스와 메모리

부레두 2023. 10. 12. 02:00

프로그램

프로그래머가 작성한 소스 파일을 컴파일, 링크를 거쳐 만들어진 실행 파일(.exe)

프로세스

“먼저 운영체제가 실행 명령들을 읽어 메모리에 재구성 한 것”
‘실행중인 프로그램’

세그먼트( 메모리 영역 )

프로세스가 포함하고 있는 여러가지 정보나 입력한 데이터의 메모리 공간

프로세스 메모리 영역

  • Code 영역 ( Read-Only )
    • 사용자가 작성한 코드가 CU에서 수행할 수 있는 기계어 형태로 변환되어 저장되는 공간 
    • 컴파일 타임에 결정되고, 코드들이 바뀔 수 없게 Read-Only로 설정
    • Data영역에서 정의된 상수 값들이 .rodata영역에 저장
  • Data 영역 ( Read-Write )
    • 전역 변수 또는 static 변수 등 “프로그램이 사용하는 데이터를 저장하는 공간” 
    • 전역 변수 중, 초기값 이 없다면 bss영역, 있다면 Data영역에 저장
    • bss영역에 있던 변수들은 main()이 실행되기 전에 0으로 초기화 되어 Data 영역에 저장
  • Heap 영역
    • 프로그래머가 필요할 때마다 사용하는 영역, 동적 할당 변수들이 저장
    • 사실상 스택과 같은 영역을 공유
  • Stack 영역 
    • 호출된 함수 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 공간
    • 지역, 매개 변수들이 저장
    • 할당과 해제가 반복되어 크기가 변동됨
    • x86 및 x64 컴퓨터의 경우 기본 스택 크기는 1MB