javaScript/jsDeepDive

데이터 타입에 따른 메모리 접근

부엉이사장 2023. 5. 2. 05:09

하 시발.. 티스토리 서버 터져서 적어놓은거 다 날아가서 다시 쓴다..ㅡㅡ

 

 

# 같은 메모리 값이라도 다른 결과가 나올 수 있다?

let binaryData = 0b01000001;
console.log(Number(binaryData)); //65
console.log(String.fromCharCode(binaryData)); //A

위 코드를 보자. binaryData변수값에 할당한 저 괴상한 숫자는 2진법으로 저장된 65라는 숫자다.

하지만 콘솔로 각각 찍어본 결과는 서로 다른 값이다.

 

https://jacobowl.tistory.com/134

 

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

# 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다. 1은 10진법수로 1, 10은 10진법 수로 2

jacobowl.tistory.com

이 포스팅에서 메모리에서는 2진법으로 데이터가 저장된다고 하였다.

 

물론 위코드에서 binaryData에 할당된 값은 숫자인데 그냥 단순히 메모리에 저장되는 2진법 데이터의 형태를

나타내기 위해서 저렇게 적었다.

암튼 01000001이라는 2진법 수는 10진법 수인 65가 될 수도 있고

스트링인 A가 될 수도 있다는 말이다.

 

그렇다면 자바스크립트는 메모리에있는 데이터를 참조할때 이 01000001이라는 값을 어떻게 문자인지 숫자인지

구분해서 가져오는 것일까?

 

 

# 숫자타입의 데이터 저장 방법

위 코드에서 자바스크립트는 binaryData라는 변수를 선언하고 값을 할당할때

숫자타입임을 인식하고 메모리의 8바이트 공간을 확보한다.

그리고 값을 저런식으로 저장을 한다.

(물론 저 그림이 정확한건 아니란다. 배정밀도 64비트 부동소수점방식으로 저장한다나 뭐래나..)

암튼 기본 구조 설명을 위해 단순히 2진법 숫자데이터가 저렇게 8바이트의 공간을 확보하고

데이터를 저장한다고 생각합시다.

 

 

 

# 숫자타입의 데이터 참조 방법

그럼 데이터를 참조할때는 어떻게 가져올까?

위 그림처럼 숫자타입이란걸 인식하고 메모리주소가 가르키는 선두셀에 접근한다. 

이 선두셀에서부터 8바이트의 크기까지를 읽고 데이터를 가져오는것이다.

만약 메모리공간의 크기를 모른채 메모리에 접근하면 스트링값 A를 가져올 수도 있게된다.

결과적으로 메모리공간의 크기(위 그림에서는 8바이트라 숫자형데이터)를 알아야 정확한 값을 가져올 수 있는것이다.

 

이 메모리주소 데이터 타입, 스코프등은 심벌테이블이라는 자료구조로 관리한다고하는데 이건 아직 모르는분야임..