[기본원리] 프로그래머가 본 메모리의 내부.

반응형



연관된 글

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


실제 메모리에는 메모리 IC가 있고 전원, 제어 등의 신호가 있습니다.
2010/07/14 - [Programing/기본원리] - 메모리의 하드웨어 구조

하지만 프로그래머 입장이라면 이런 하드웨어 구조보다 더 중요한게 있는데요,
그것은 바로 실제 메모리엔 없는 개념인 '유형(type)' 입니다.

유형은 어떠한 종류의 데이터가 저장되는지,
메모리에서의 점유하는 크기 ( 바이트의 수 ) 를 의미하지요.

실제 1바이트씩 데이터를 읽고 쓰게 되어있지만 데이터의 유형에 따라 여러개의 바이트씩 읽고 쓸 수 있습니다. 실제 인텔 프로세서 에서는 리틀 엔디안( little-endian ) 이라는 방식을 쓰고 있습니다.
리틀 엔디안 : 여러개의 바이트로 이루어진 데이터의 하위 바이트메모리의 하위 어드레스에 저장하는 방식입니다.

아래 코드를 보시죠.

각기 다른 데이터 유형에 같은 값(100)을 넣는 프로그램 입니다.

여기에서 3개의 변수는 메모리의 특정 영역을 나타내는데, 프로그램에서 직접 어드레스를 지정하지 않아도 변수를 사용함으로써 메모리에서 읽고 쓰기가 가능한 것입니다.
이것은 운영체제(OS)가 프로그램이 실행될 때 변수의 물리적 주소를 자동으로 지정해 주기 때문이죠 ^^


char 데이터형은 1바이트
short 데이터형은 2바이트
long 데이터형은 4바이트 입니다.
( 여기에서 X 는 실제 메모리 어드레스를 표현한 것입니다. - 운영체제가 직접 지정하기 때문에 임의로 X로 표현하였습니다. )

그림처럼 변수 유형에 따라 점유 메모리의 크기가 달라지게 됩니다.

이렇게 생각해 보면 어떨까요?
지정하는 변수의 유형에 따라 메모리를 읽고 쓰는 단위가 바뀌는건 참으로 편리합니다.
메모리의 읽고 쓰는 단위가 1바이트로 고정되어 있다면?
아마 1바이트를 넘는 데이터를 처리하려면, 이것을 분할하여 처리하는 루틴을 계속계속 만들어 내야 될 것이겠죠...

프로그램 언어에 따라 변수의 최대 바이트 크기는 달라지는데요,
C언어를 예로들면 8바이트의 double 데이터형 ( 2의 8제곱 = 64비트 ) 가 최대입니다.

메모리의 용량은 한정되어 있기 때문에 변수의 유형도 신경써야 할테지요.
(물론, 요즘 데스크탑이나 노트북 등에선 크게 지장 없을지도... 허나 스마트폰 전용 프로그램 개발에선 신경써야할듯.. )

예를들어, 1바이트 만으로도 처리가 가능한 값을 double 형 등에 넣어두면 메모리가 낭비되는 꼴이지요.


배열과 메모리의 관계

배열(Array)은 같은 데이터 유형을 가진 여러개의 데이터가 메모리안에 차례로 나열되어 있는것을 말합니다.
배열의 요소가 되는 데이터는 각각의 인덱스로 구분되는데요,
이 인덱스를 써서 그에 대응하는 메모리 영역을 읽고 쓸 수 있는 것이죠.
※ 인덱스와 실제 메모리주소간의 변환은 컴파일러가 자동으로 해줍니다 ^^

이처럼 배열은 메모리 사용의 기본이 된다고 볼 수 있지요.
그 이유는 배열 사용법이 메모리 실제 구조와 비슷하고,
1바이트의 데이터 유형을 쓴다면 완전히 일치하는 구조가 됩니다.

반복해서 처리하는 루프(loop) 문 안에 배열을 쓴다면
짧은 코드로 많은 수의 배열 요소를 순서대로 읽고 쓸수가 있지요.

하지만 배열은 인덱스를 써써 사용되는 방식이기 때문에
실제 메모리 물리적주소를 쓰는것과 비슷해 진다는 단점이 있습니다.

그래서 배열의 다른 방법인, 스택 , 큐, 리스트 등의 방법이 있고,
이런 방법들은 인덱스를 지정하지 않고도 배열을 사용할 수 있게 해줍니다.

스택, 큐 , 리스트 등은 내용이 길어질 듯 예상되어
다음 포스팅으로 넘겼습니다 ㅎ




반응형

댓글

Designed by JB FACTORY