F.R.I.D.A.Y.

포인터의 크기 본문

DEV/C C++

포인터의 크기

F.R.I.D.A.Y. 2020. 1. 26. 23:15
반응형

 자료형은 저마다 크기가 존재합니다. C언어의 기중 중 하나로 볼 수 있는 포인터도 예외는 아닌데요, 포인터의 크기는 어떻게 정해졌는지 알아봅니다.


프로그램 버전에 종속적

 아래 포스트에서 잠깐 언급한 적이 있습니다.

 

프로젝트에서 개발하는 프로그램이 32비트인지 확인하는 방법

Windows OS가 설치된 드라이브를 보면 Program Files이란 폴더와 뒤에 (x86)이라 붙은 폴더가 있습니다. 각각의 폴더는 64비트, 32비트로 개발된 프로그램이 설치되는 기본 폴더를 의미합니다. 그렇다면 64비트..

pang2h.tistory.com

 지금 개발 중인 프로그램이 32비트라면 포인터는 4Byte, 64비트 프로그램이라면 포인터는 8Byte로 크기가 고정됩니다. 이 크기는 각 운영체제에서 가용할 수 있는 최대 메모리 크기와도 연관됩니다.

 

 이론상 32비트 운영체제는 4GB, 64비트 운영체제는 16EB까지 RAM을 확장할 수 있습니다. 운영체제는 메모리를 효율적으로 관리하기 위해 특정 단위로 메모리를 관리합니다. 그 단위로 Byte를 사용합니다. Byte는 C언어에서 char 타입으로 명명된 크기입니다. 즉, 1Byte 단위로 메모리를 관리[# OS에서 관리하는 단위가 그렇다는 것입니다. bit 단위에 접근하기 위해 bit 연산자를 제공합니다.]하는 것이죠.

 

 4GB를 Byte로 변환해보겠습니다.

4(GB) = 4 * 1024^3 = 4,294,967,296

 

 16EB를 Byte로 변환해보겠습니다.

16(EB) = 16 * 1024^6 = 18,446,744,073,709,551,616

 

 

 각 크기를 Byte 단위로 관리하려면 이 수들을 관리할 수 있어야 합니다.

 

 

 

정수 제한

정수 제한Integer Limits 이 문서의 내용 --> Microsoft 전용Microsoft Specific 다음 표에서는 정수 형식에 대한 제한 사항을 보여 줍니다.The limits for integer types are listed in the following table. 이러한 제한은 표준 헤더 파일 에도 정의되어 있습니다. These limits are also defined in the standard header file . 정수 상수

docs.microsoft.com

 이 글에서 UINT_MAX(혹은 ULONG_MAX)와 ULLONG_MAX를 보겠습니다.

 

 최댓값은 해당 자료형이 표현할 수 있는 가장 큰 수입니다. 달리 이야기하면 MAX 값의 + 1[# 값이 0인 경우] 가지의 경우 중 한 가지를 저장할 수 있다는 말이 됩니다.

 그래서 포인터가 32비트 운영체제에서는 32비트인 int[# 혹은 long] 크기로, 64비트에서는 long long 크기로 표현되는 것입니다. 그러나 64비트 운영체제에서는 32비트 프로그램을 실행할 수 있습니다. 호환성을 지원하기 때문입니다. 그래서 운영체제의 버전에 따라 포인터가 결정된다고 보기보단, 프로그램을 개발할 때 몇 비트 프로그램으로 개발했는지로 판단해야 합니다.

728x90
반응형

'DEV > C C++' 카테고리의 다른 글

구조체(struct) part2. 비트 필드  (0) 2020.01.29
공용체(union) part1. default  (0) 2020.01.28
포인터 배열? 배열 포인터?  (0) 2020.01.26
다차원 배열의 요소 값 교환하기  (0) 2020.01.25
포인터와 배열  (0) 2020.01.24
Comments