질문 - 64비트 가상 메모리 - 포인터 변수의 올바른 주소

질문 - 64비트 가상 메모리 - 포인터 변수의 올바른 주소

모의고사에는 다음과 같은 문제가 포함되어 있습니다.

다음 중 x86_64 프로세서의 포인터 변수에 대한 올바른 메모리 주소는 무엇입니까?

  • 0x7ffffff3328
  • 0x0
  • 0x8043844
  • 0x555555ab3b

검색하는 동안 x86_64 가상 메모리 주소의 길이가 48비트라는 것을 발견했습니다. 그러나 이것은 나를 혼란스럽게 합니다. 가능한 답변 중 어느 것도 48비트 주소를 표시하지 않습니다. 주소 끝이 0으로 채워질 것이라고 가정할 수 있습니까?

모든 주소가 유효한 48비트 주소라고 가정하면 0x0과 0x8043844를 제거할 수 있습니다. 0x0은 널 포인터이고 0x8043844는 커널 공간의 주소여야 하기 때문입니다. 이제 0x7ffffff3328과 0x555555ab3b만 남았습니다. kernel.org를 확인하면 0x0000000000000000에서 0x00007fffffffffff가 유효한 사용자 공간 주소라고 나와 있습니다(https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt).

내가 무엇을 놓치고 있는지 잘 모르겠습니다. 0으로 채워진 주소 패딩에 대한 내 가정이 정확합니까? 어느 주소가 정답이고 그 이유는 무엇입니까?

어떤 도움이라도 정말 감사하겠습니다 :)

관련 정보