해결된 질문
작성
·
246
4
일반적인 상황에서는 메모리 주소가 해당 자료형에 맞게 순차적으로 할당된다고 말씀해 주셨고 실제로 메모리 주소도 보면서 이해하였습니다.
그런데 앞 강의에서 배열이 굉장히 큰 경우 등은 모든 메모리 주소가 연결 되어있지 않을 수도 있다고 해주셨던거 같은데 이 경우에 해당 배열에 포인터 연산을 사용한다면 문제가 발생하지는 않을지 궁금해 질문드립니다.
답변 4
6
다른 강의(컴퓨터 구조)를 듣다가 알게 된 사실인데
각 프로그램을 실행했을 때 이를 process라 부르고, 이들 process들은 서로 독립적인 virtual memory를 사용한다는군요.
이는 physical memory(실제 DRAM 상의 메모리)와는 다른 개념으로 (저는 처음에 physical memory를 상상했었습니다.)
프로그래머 입장에서는 아주 큰 메모리를 갖는다고 느끼게 해주는 것입니다.
그 내부에는 physical memory 와 virtual memory 사이에서 두 memory address를(각각은 서로 다른 memory address를 가집니다.) translation을 해주는 page table 이 존재하는데, 이 table이 virtual memory 와 physical memory 사이의 관계를 형성해주고 각 process 내에서는 서로 독립적인 virtual memory 공간을 만들어서 아무리 길게 연결해도 연속된 것처럼 나타나고, 질문주셨던 현상을 프로그래머 입장에서는 쉽게 볼 수 없는 것입니다.
2
2
감사합니다.
저도 비슷한 방법으로 시도해 보았는데 별다른 문제는 발생하지 않네요.
현재 상황보다는 나중에 천문학적인 크기의 데이터를 다루는 경우가 생기면 그 때 다시 생각할 문제인것 같습니다.
좋은 참고가 되었습니다.
2
i th 주소와 i-1 th 주소를 비교하여 4가 차이나지 않으면 메시지를 출력하고 종료하는 프로그램입니다.
관련 자료를 찾아보려 했으나 찾지는 못했고 20억개(8GB)까지 해보니 아직까지는 그런 문제가 발생하진 않네요.
하지만 만약 그런 일이 발생한다면 OS와 compiler를 만드시는 분들이 잘 작동하도록 하셨을 것이라 생각합니다.
어쩌면 지금의 경우도 문제는 발생하고 있는데 제가 모르게 겉으로는 나타나지 않게 해주는 것일 수도 있죠.
확답을 못드리겠네요. 도움은 됐으면 좋겠습니다.