2012-01-17 7 views
0

프로그램 메모리가 런타임에 할당되고 프로그램의 다른 섹션 또는 "세그먼트"(올바른 단어 인 경우)가 배치되는 방식으로 머리를 감싸려고합니다. 나는 거의 다 왔지만,별로 도움이 안된다.프로그램 메모리 할당

이 프로그램에는 초기화 된 전역 변수에 대한 읽기 전용 메모리와 읽기 - 쓰기 메모리가 모두있는 .data 섹션이 포함되어 있습니다. 나는 .bss 섹션이 초기화되지 않은 전역 변수와 정적 변수에 사용되며 읽기 - 쓰기라는 것을 알고 있습니다. 나는 힙과 스택을 이해합니다.

다음 질문

내 혼란을 보여

  1. 무엇 .rodata 부분이 어디에 존재 하는가?
  2. . 데이터는 어떻게됩니까? MASM의 섹션은 .data 섹션과 다릅니다.
  3. 모든 프로그램에 표준 .data, .bss, .code 섹션, 이 있어야합니까? 아니면이 규칙 만 지침입니까?
  4. 어떤 섹션을 읽고 쓸 수 있고 실행 가능하게 결정합니까?

모든 도움을 주시면 감사하겠습니다. 상수와 리터럴 일명 this를 참조

답변

2
  1. .rodata읽기 전용 데이터입니다.

  2. this에 따른 .data?.data는 초기화 된 데이터이며, 초기화 데이터, 일명 .bss 단면 데이터이다.

  3. Windows PE format에 따르면 특정 섹션이 있고 그 순서가 (컴파일러가 정의 됨으로 명시되어 있음) 절대로 생각할 수 없습니다. 그러나, 그 꽤 표준 .data.code을 가지고 있지만 여전히, 당신은해야 항상 체육을 확인, 그 이유는 그곳. (부분 here의 단락 섹션 디스크립터 구체적 Characteristics 필드 참조 :

  4. 는 OS의 특정 (승, ELF 또는 마하 O 또는 PE 특정) 인 이와 같이, PE의 섹션 헤더를 통해 이루어진다 다시 이것은 Windows 용 에만, 당신은 선택한 운영 체제에 대한 체육 레이아웃을 사용해야합니다)입니다.