본문 바로가기

BackEnd/C

포인터와 메모리

반응형

1. 포인터란?


포인터는 주소값을 담고 있는 변수 또는 상수이다.


일단은 이 정도로 포인터를 정의하고 더 깊이 알기 위해 배경지식을 알아보자


(추가적으로 포인터는 참조하는 대상의 자료형 정보도 지니는데 이건 나중에 다시 볼것이다.)


2. 메모리의 주소체계


포인터가 메모리의 주소 값과 관련이 있는 만큼, 메모리의 주소체계를 알아보자


주소 값 하나가 가리키는 메모리 공간의 크기는 1바이트이다.


아래 그림에서 0x12ff73번지는 8개의 비트가 묶인것이다. 즉 주소값은 1바이트 단위로 할당이 된다.




3. 메모리의 주소 값 자체를 표현하는데 필요한 바이트 크기는?


메모리의 주소 값 자체를 표현한다는것은 메모리의 주소값을 메모리에 저장한다는 뜻인데,


표현할 주소 값의 범위에 따라 필요한 바이트 크기가 달라진다.


예를 들어서 주소값 0x12를 변수에 저장한다고 해보자.


몇 바이트 크기의 변수가 필요한가? 1바이트, 2바이트, 4바이트 변수에도 모두 저장이 가능하


다. 하나의 크기를 정해야 한다. 차이점은 표현의 범위가 달라진다. 


16비트로 주소값을 표현할 때 나타낼 수 있는 주소값의 범위는 2의 16승 65536개의 바이트에 


주소를 부여할 수 있다. 따라서 주소를 65535번지개를 부여할 수 있는것이다.


32비트라면 2의32승 4,294,967,296개의 바이트에 주소를 부여할 수 있다. 


즉 주소값의 비트수가 크면 클수록 보다 넓은 메모리 공간에 주소 값을 부여할 수 있다.


결론적으로 더 많은 주소를 부여하고 싶다면 메모리 주소값 표현에 필요한 바이트 크기가 커진


다.



4. 주소값이 할당된 메모리공간만 활용 가능


메모리 공간을 실제로 활용하는 주체는 운영체제이다. 운영체제는 메모리 공간을 관리하기 위해서 


주소값을 할당한다. 따라서 주소 값이 할당되지 않은 메모리 공간은 운영체제에서 활용할 수 없는


메모리 공간이 되어버린다. 그래서 주소값이 16비트로 표현되는 시스템에서 사용할 수 있는 최대 


메모리 공간은 2의 16 크기가 되고 , 32비트로 표현되는 시스템에서에서는 2의 32승이 된다. 그만


큼 주소 값의 크기는 중요한 의미를 담고 있다.


5. N비트 시스템의 주소값 표현 크기


16비트 시스템에서는 주소 값 표현에 16비트를 사용하므로, 실행중에 있는 프로그램이 사용할 수 


있는 메모리 공간은 655536바이트가 최대이다.


32비트 시스템에서는 주소 값 표현에 32비트를 사용하므로, 메모리공간은 4기가(4,294,967,296) 


이트가 최대이다. 즉 N비트 시스템에서는 주소 값 표현에 N비트를 사용하며, 메모리공간은 2의 N


승 바이트가 최대이다.









반응형

'BackEnd > C' 카테고리의 다른 글

포인터 형과 *연산자  (0) 2019.03.12
포인터 변수 선언  (0) 2019.03.12
포인터  (0) 2019.03.11
2차원 배열을 함수의 인자로 전달  (0) 2019.03.11
1차원 배열을 함수의 인자로 전달  (0) 2019.03.11