작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
53
0
가상 메모리 영역 구분이 stack, heap, static으로 구분되었는데 static부분이 코드영역(기계어 저장), 데이터 영역(.data , .bss 영역)인것인지 궁금합니다
답변 2
0
static은 메모리의 특성일 뿐입니다. 개념 상 정적 메모리는 프로세스가 실행 중인 동안 그대로 유지됩니다. 여기서 더 중요한 것은 접근 모드 입니다. 읽기, 쓰기, 실행하기 접근 모드가 있으며 이는 권한과도 연결됩니다. 생각하시는 실행코드가 저장되는 영역(.text)은 R-X(읽기와 실행) 접근이 허용되는 영역이며 당연하게도 정적인 특성이 있습니다.
그러나 이는 설정 변경을 통해 쓰기 가능 영역으로 변경 할 수도 있고 실제로 기계어를 덮어 쓰는 것도 가능합니다. 이를 이용해 실행 중인 프로세스의 실행 코드를 런타임에 수정 할 수도 있으며 통상 API hook을 구현할 때 자주 사용됩니다. AI답변과 더불어 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. LoDf님.
가상 메모리와 관련된 질문을 주셔서 감사합니다. Windows 시스템 프로그래밍에서 사용되는 가상 메모리는 일반적으로 여러 영역으로 나뉘어 관리됩니다. 질문하신 static 부분에 대해 설명드리겠습니다.
코드 영역:
데이터 영역:
.data
영역은 초기화된 전역 변수들이 저장되는 공간입니다..bss
영역은 초기화되지 않은 전역 변수들이 차지하는 공간으로, 런타임에 초기화됩니다(모든 값이 0으로 초기화됨).힙 영역:
malloc
, C++의 new
연산자 등이 해당합니다.스택 영역:
이해하신 대로, static 부분은 코드 영역뿐만 아니라, 데이터 영역의 초기화된 데이터와 초기화되지 않은 데이터가 포함된 부분까지 설명할 수 있습니다. 이는 프로그램이 시작될 때부터 끝날 때까지 그 상태를 유지하는 곳이기도 합니다.
관련 주제로 도움이 될 수 있는 추가 게시물이 있습니다:
- 가상메모리 관련 질문있습니다.: 가상메모리의 다양한 영역과 그 할당 방식에 대한 설명이 담긴 게시물입니다.
- 가상 주소, 절대 주소 부분이 헷갈립니다.: 프로세스의 가상 메모리가 어떻게 할당되고 사용되는지에 대한 자세한 설명이 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.