javaScript/jsDeepDive

메모리에 저장되는 기본 구조.

부엉이사장 2023. 3. 21. 07:20

# 시작하면서 2진법에대해서 되돌아보자.

중학생때 배웠던 2진법을 기억하고 있을것이다.

즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다.

1은 10진법수로 1, 10은 10진법 수로 2이다. 이런식으로 0과 1로 숫자를 표현할 수 있는것이다.

 

컴퓨터에선 메모리 주소 기본단위에 0이나 1을 저장할 수 있는데, 이 기본단위를 '비트'라고 한다.

이렇게 데이터 단위는 기본 Btye로 시작해서 2의 배수대로 커지는 시스템이다.

그럼 1바이트는 0이나 1을 저장할 수 있는 공간이 8개이니, 2^8 = 256 가지의 데이터를 저장할 수 있게된다.

 

 

 

 

# 자바스크립트의 메모리 구조

위 그림처럼 메모리 하나는 1바이트(8비트)의 크기를 가지고 있고 각 셀마다 메모리 주소가 지정되어있다.

컴퓨터는 메모리주소를 지침삼아 메모리에있는 데이터에 접근하게 되는것이다.

메모리에 저장되는 수는 모두 2진수로 저장이 된다.

 

 

 

# 코드로 js에 값 하나를 적었을 경우.

코드에 1이라는 숫자를 적으면 이 값은 메모리에 저장되며 이 메모리를 가르키는 메모리주소가 하나 

부여된다. 이 메모리주소는 0x0000123이런식으로 생겼는데 그림에서는 편의상 메모리주소1,2,3으로 적겠다.

 

1뿐아니라 모든 숫자(값)가 이렇게 메모리에 적용된다.

 

제목에서처럼 코드상에

1+2

라고 적었을경우 1과 2는 각각 메모리에 저장되고 이 메모리에 각각 하나씩 메모리주소가 생기게된다.

하지만 중간에 +라는 연산자로 인해 1+2가 계산되어 3이라는 값이 생성되는데, 

이 작업은 CPU에서 처리한다.

이렇게 생겨난 3이라는 데이터도 메모리에 저장되고 이 메모리또한 메모리 주소를 갖는다.

 

 

 

# 메모리 제어 in js

메모리 주소와 메모리의 크기를 알 수는 없을까 하는 의문이 생겼었다.

 

- 메모리주소

코드를 실행할때마다 위 그림에서 1과 2가 저장되는곳이 달라진다.

이전에 1과 2가 저장된 메모리주소에 접근을 하면 이 데이터가 남겨져 있다.

이런식으로 메모리주소를통해 데이터에 접근하고 제어하면 나중에 쓰레기메모리데이터가

사용된다거나, 삭제가 안된다거나 등등 문제가 발생하기 때문에, js에서는 메모리주소에 접근하는

방법을 전부 막아놨다고 한다.

하지만 js 엔진이 C++로 제작되었다나.. 해서 C++을 공부하면 주소를 알수도 있다고 한다.

 

- 메모리크기

메모리의 크기또한 알 수 없었다. 하긴 메모리주소를 알아야 그 메모리를 찾아가고

그 메모리에대한 정보를 캐내겠지만..

구글링을 해봐도 데이터 length에 따라서 바이트크기 계산 등등 코드지만

난 원초적인 어떤 데이터의 메모리 크기를 알고 싶었지만 못찾은건진 몰라도 방법이 없었다.

하지만 직간접적으로 '스트링'에 대한 크기는 코드를 고치면서 파일크기로 알 수 있었다.

 

예를들어 코드에

1

이라고 숫자하나를 적고 이 js파일의 크기를 보면, 

4바이트다. 숫자하나가 4바이트나 차지한다고? 생각하겠지만 기본 js파일의 크기도 생각해야해서

숫자를 하나 더 적고 크기를 확인하면, 

12

크기가 1바이트 늘었다. 즉 숫자 하나는 1바이트 크기를 차지하게 된다.

하지만 내가 바랬던 원초적인 메모리크기 제어는 불가능하더라.

예를들어 255숫자와 256숫자의 메모리 용량차이를 알고싶은데,

단순히 내가 사용한 방법은 코드를 '스트링'으로 읽기때문에 숫자 '리터럴'이 몇글자 사용됬는지로

크기를 측정한다.

 

더해서 몇가지 테스트를 더 해봤는데

알파벳은 숫자와 같이 글자하나당 1바이트를 차지했고,

한글은 글자 하나당 3바이트를 차지했다.

 

 

 

참조 자료

 

[비탄기] 1 바이트가 8비트인 이유

[비]전공자의 [탄]탄한 기본[기]를 위한 스무개의 질문 리스트 첫번째.

velog.io

 

[자바스크립트] 메모리 구조, 원시타입 변수 생성 원리, 가비지컬렉터

자바스크립트가 기본 타입 데이터를 저장, 참조하는 과정을 메모리의 관점에서 아주 단순화하여 정리해 본다. # 메모리 구조, 데이터 저장/참조 원리 컴퓨터의 메모리는 1Byte(8bit)크기의 메모리

curryyou.tistory.com