이 글의 댓글 중 물리 메모리가 연속되어 있지 않을 가능성이 있다고 하는데... 최근에 가상 메모리 공부했던 내용이랑 다른 것 같아서 질문함.
내가 아는 내용으론, 가상 메모리랑 물리 메모리가 페이징될 때 페이지 단위로 이루어지는 걸로 알고 있음. 그러면 가상 메모리의 페이지 내에서 메모리가 연속적이면 물리 메모리에서도 연속적인거 아님?
만약 가상 메모리에서 어떤 배열이 페이지 2개를 잡아먹는 경우엔 두 페이지의 경계에 있는 가상 메모리가 물리 메모리에서는 불연속적일 수 있다고는 생각하는데, 댓글 쓴 사람이 이걸 말한건지 모르겠음...
페이지 여러 개 잡아먹는 거 말하는 게 맞는 듯
당연히 일정 크기 이상이면 페이징 범위를 벗어날수밖애없음
그럼 페이지 여러개에 걸쳐있는 경우를 말하는거 맞나보네. 다들 감사합니다.
2바이트짜리여도 이론상으로는 두 페이지에 걸쳐 있을 수 있지 컴파일러가 그렇게 멍청하게 할당하지는 않지만
가상멤은 컴파일러가 아니라 os 관리
이거 정처기 문제에 나오는데 무조건 겹치게 됨
겹치게 된다는게, allocator가 페이지 경계에 걸쳐지도록 메모리를 할당하는 경우가 있다는 소리임?
ㅇㅇ 프로그램 복잡해지면 무조건 겹침. 본문도 그런의도로 말한거고.
혹시 검색 키워드좀 알려줄 수 있음??
OS나 하드웨어가 해주는 걸텐데 신경 쓸 필요 없지 않나? 앱 입장에서는 연속된 메모리인데 결국. 귱금한 게 물리 메모리가 연속되면 성능이 더 좋음? 그러면 신경 쓸 가치가 조금은 있을 거 같지만..
내가 알고 있는 내용을 써보자면(틀릴 수도 있음), 디스크에서 페이지 단위로 램에 올라가고, 램에서 캐시 라인 단위로 캐시에 올라가고, 캐시에서 워드 단위로 레지스터에 올라감. 가상메모리에서 한 페이지 내에 연속적으로 데이터기 뭉쳐있으면 램에 다같이 올라가게 됨. 그러면 자주 사용되고 연관성 높은 데이터가 뭉쳐있으면 페이지 폴트가 덜 발생할 것임. 같은 이유로 캐시 라인 크기 단위로 데이터가 뭉쳐있으면 성능이 더 올라갈 것임. 그래서 물리적으로 연속해있는게 성능이 더 좋다고 생각함.
근데 어떤 데이터가 페이지 사이에 걸쳐있다고 한다면 그 데이터를 읽기 위해 두 페이지를 램에 올려야하고 캐시 라인도 하나가 아니라 두 개에 걸쳐 있을거라고 생각함.