자료구조를 통한 메모리의 이해
자료구조 : 데이터를 저장하고 관리하는 방식
자료구조에서 사용하는 메모리는 크게 HDD 와 RAM 이 존재한다. HDD 는 우리가 코드를 작성하면 저장하는 곳이고 이 코드를 실행하는 곳이 바로 RAM 이다. 이 RAM에 대해서 알아보자
RAM
0과 1로 이루어진 컴퓨터 ( 이진법 )
램에는 수많은 레지스터가 존재한다. 그 레지스터가 on 일시 1 을 뜻하고 off 가 되면 0 이된다고 쉽게 생각해볼때 한 개의 레지스터는 2개의 수를 나타낼수 있는 것이다. 한개의 레지스터는 이진수를 영어로한 binary digit의 약자 bit 가 되는 것이다.
즉, 한개의 레지스터는 1bit 가 되는 것이다. 이처럼 1bit는 2개의 숫자로 표현하는 이진법을 사용하게 되고 2bit는 4개 나아가 8bit(1byte) 는 2의8승 개의 숫자를 표현할 수 있는 것이다.
※ 16비트
나아가 16비트도 많이 사용하는데 16은 2의4승 즉, 4bit를 한단어로 표현하게 되는것이다.
이진법을 4개씩 나누고 해당하는 16진법의 숫자로 변환후에 16진법이라는 표시인 0x를 붙여 뒤에 표시하게 된다
십진법 = 217
이진법 = 11011001
16진법 = 0xD9
나의 컴퓨터 용량을 체감해보자
예를 들어 컴퓨터의 용량이 1MB 라면?
1byte(8bit) 가 1024개가 모이면 1KB → 1KB 가 1024개가 모이면 1MB
이처럼 굉장히 많은 저장공간이 있다고 생각하면 좋을거 같다. 근데 우리는 저장을 하는 이유가 나중에 사용하고자 저장하는 것인데 그렇다면 필요할때마다 꺼내려면 어떠한 정확한 지표가 필요하다. 이때 사용하는 것을 주소값이라고 한다.
주소값
위에서 말했다시피 굉장히 많은 저장공간을 다루는 컴퓨터는 각 저장된 데이터를 주소값으로써 저장하는데 이때 16진법으로 주소값을 표기한다.
첫번째 byte = 0x0
두번째 byte = 0x1
820101번째 byte = 0xC8352
2의20승번째 byte = 0xFFFF
이런식으로 표현하게 된다.
메모리 할당
예시(int , Character, List)
우리가 흔히 아는 int는 데이터의 저장공간이 4byte의 메모리를 차지한다.
십진법인 숫자를 이진수로 변환하고 저장한다.
290000000 = 10001010010010000110010000000
각 저장하려는 숫자를 1byte씩 끊어 저장소에 저장된다.
00010001 - 1byte
01001001 - 2byte
00001100 - 3byte
10000000 - 4byte
그렇다면 1byte 를 차지하는 Character는 어떻게 저장될까
char ascii = 'A'; 이는 아스키 코드 넘버 65에 해당하면서 주소에는 65라는 숫자로 저장된다.
01000001 이런식으로 말이다.
이번에는 조금 복잡하게 list를 저장한다면
1. Array ( 메모리에 연속되게 저장한다 )
int[] array = {1, 2, 3, 4}
이런식으로 저장한다면 각 저장공간은 int 형인 4byte를 할당받고 각각의 int형 숫자가 메모리에 연속적으로 저장된다.
2. LinkedList (다음 값의 저장소 위치를 저장한다. = 노드)
LinkedList는 숫자뿐 아니라 주소까지 저장해야하기 때문에 해당 타입의 2배에 해당하는 저장공간이 필요하다.
때문에 int 형의 LinkedList 를 받았다면 8byte가 필요하게 되는 것이다.
※ 참고로 저장되는 저장소는 그 값의 시작 값이다.