변수는 데이터를 담을 수 있습니다.
그렇다면 변수는 컴퓨터 하드웨어 중에서 어디에 저장이 될까요?
아마, RAM(Random Access Memory)이나 HDD/SSD일 것입니다.
이 중에서 HDD/SSD는 상대적으로 RAM보다 속도가 느리기 때문에 CPU는 연산을 마친 후 RAM에 데이터를 저장하게 됩니다.
즉, 변수는 RAM(이하 메모리)에 저장이 됩니다.
오케이! 여기까지는 이해 했습니다.
그러면 변수가 메모리에 저장되는건 알겠는데... 어떻게 데이터를 저장하고 불러올 수 있을까요?
아니, 도대체 어떻게 저장을 한다는 걸까요? 어떤 방식으로?
차근 차근 스텝을 밟아 봅시다.
1. 변수를 도대체 어떻게 저장할까요?
이것을 알기 위해서는 우선 메모리가 어떤 구조로 되어있는지 살펴볼 필요가 있습니다.
메모리는 반도체로 이루어져 있고, 반도체는 전자의 움직임으로 1과 0을 구분하고 저장할 수 있습니다.
그러므로 메모리는 1과 0들의 집합을 담을 수 있습니다.
매트릭스 초록색 화면 알고 계신가요?
이렇게 메모리가 담고있는 데이터들을 계속 분해해보면 결국에는 1과 0으로 이루어진 data set이 나오게 됩니다.
결국 변수는 메모리에 1010 같은 이진수로 저장이 됩니다.
2. 메모리에 데이터를 하나만 저장하지 않는 이상, 여러 데이터들을 저장해야 할텐데 그러면 데이터가 섞이지 않을까요?
우리 옷장 서랍도 영역이 구분되지 않으면 시간이 지나면서 런닝과 팬티가 섞여버리잖아요?
맞습니다. 그래서 메모리는 수 많은 영역으로 쪼개져 있습니다. 그리고 그 영역의 기본 단위는 1 byte 입니다.
우리가 흔히 쓰는 16GB 메모리는 16 * 1024 * 1024 * 1024 (byte) 개의 영역을 갖고 있는 것입니다!
이제는 이해가 조금 갑니다. 이제는 여러 개의 변수를 메모리에 저장할 수 있게 되었습니다.
그런데 말입니다...
3. 그럼 방금 저장한 데이터는 어떻게 불러올까요? 갯수가 적으면 메모리의 맨앞에서부터 하나씩
내가 원하는 데이터가 나올 때까지 불러오면 되겠지만 데이터의 갯수가 많아지면 너무 비효율적입니다.
방금 저장한 데이터가 메모리의 처음이나 중간에 있으면 그나마 괜찮겠지만, 맨 끝에 있으면요?
또 중간에 있는 데이터를 수정하려면 매번 수정할 때마다 맨 앞에서부터 순차적으로 읽어가야 하잖아요?
그래서 메모리의 각 영역에 주소라는 개념이 도입되었습니다.
예를 들어서, 16 바이트의 메모리가 있다고 합시다.
ㅁㅁㅁㅁㅁㅁㅁ ㅁㅁㅁㅁㅁㅁㅁㅁ (가독성을 위해 2분할)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
이렇게 각 영역마다 주소가 있으면 원하는 영역에 데이터를 저장하고 불러오는게 훨씬 쉬워집니다.
따라서 메모리와 주소(address)는 뗄레야 뗄 수 없는 관계임을 우리 모두 알게 되었군요.
짝짝!
'Languages > C' 카테고리의 다른 글
포인터는 무엇이고 왜 쓰고 어떨 때 쓰나요? (0) | 2021.01.07 |
---|
최근댓글