Inflearn brand logo image

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

Windows 시스템 프로그래밍 - 기본

가상 메모리와 보호 모드

가상 메모리 시스템 영역 구분

해결된 질문

작성

·

53

0

가상 메모리 영역 구분이 stack, heap, static으로 구분되었는데 static부분이 코드영역(기계어 저장), 데이터 영역(.data , .bss 영역)인것인지 궁금합니다

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

static은 메모리의 특성일 뿐입니다. 개념 상 정적 메모리는 프로세스가 실행 중인 동안 그대로 유지됩니다. 여기서 더 중요한 것은 접근 모드 입니다. 읽기, 쓰기, 실행하기 접근 모드가 있으며 이는 권한과도 연결됩니다. 생각하시는 실행코드가 저장되는 영역(.text)은 R-X(읽기와 실행) 접근이 허용되는 영역이며 당연하게도 정적인 특성이 있습니다.

그러나 이는 설정 변경을 통해 쓰기 가능 영역으로 변경 할 수도 있고 실제로 기계어를 덮어 쓰는 것도 가능합니다. 이를 이용해 실행 중인 프로세스의 실행 코드를 런타임에 수정 할 수도 있으며 통상 API hook을 구현할 때 자주 사용됩니다. AI답변과 더불어 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. LoDf님.

가상 메모리와 관련된 질문을 주셔서 감사합니다. Windows 시스템 프로그래밍에서 사용되는 가상 메모리는 일반적으로 여러 영역으로 나뉘어 관리됩니다. 질문하신 static 부분에 대해 설명드리겠습니다.

가상 메모리 영역

  1. 코드 영역:

    • 이 영역은 실행할 기계 코드가 저장되는 영역입니다.
    • 이러한 코드들이 실행될 때 읽기 전용으로 접근됩니다.
  2. 데이터 영역:

    • 정적으로 할당된 변수를 저장하는 공간입니다.
    • .data 영역은 초기화된 전역 변수들이 저장되는 공간입니다.
    • .bss 영역은 초기화되지 않은 전역 변수들이 차지하는 공간으로, 런타임에 초기화됩니다(모든 값이 0으로 초기화됨).
  3. 힙 영역:

    • 동적으로 메모리를 할당할 때 사용됩니다. 예를 들어, C 프로그래밍의 malloc, C++의 new 연산자 등이 해당합니다.
  4. 스택 영역:

    • 함수 호출 시 생성되는 스택 프레임이 저장되는 공간입니다.
    • 지역 변수, 함수 호출 시의 매개변수 및 리턴 주소 등이 저장됩니다.

이해하신 대로, static 부분은 코드 영역뿐만 아니라, 데이터 영역의 초기화된 데이터와 초기화되지 않은 데이터가 포함된 부분까지 설명할 수 있습니다. 이는 프로그램이 시작될 때부터 끝날 때까지 그 상태를 유지하는 곳이기도 합니다.

관련 주제로 도움이 될 수 있는 추가 게시물이 있습니다:
- 가상메모리 관련 질문있습니다.: 가상메모리의 다양한 영역과 그 할당 방식에 대한 설명이 담긴 게시물입니다.
- 가상 주소, 절대 주소 부분이 헷갈립니다.: 프로세스의 가상 메모리가 어떻게 할당되고 사용되는지에 대한 자세한 설명이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기