C/C++에서 포인터의 크기는 고정된 값이 아닙니다
C/C++에서 포인터의 크기는 표준으로 정해진 고정값이 아니며, 운영체제(OS), CPU 아키텍처 등 여러 요소에 따라 달라집니다. 일반적으로 포인터 크기는 프로세서의 워드(word) 크기, 즉 CPU가 한 번에 처리할 수 있는 기본 데이터 단위에 의존합니다.
32비트 vs 64비트 시스템에서의 포인터 크기
가장 대표적인 예는 다음과 같습니다.
- 32비트 컴퓨터: 포인터 크기는 보통 4바이트(32비트)
- 64비트 컴퓨터: 포인터 크기는 보통 8바이트(64비트)
즉, 특정 아키텍처가 정해지면 그 환경에서의 포인터 크기는 항상 동일하게 고정됩니다.
포인터 크기는 데이터 타입과 무관합니다
중요한 점은 포인터가 가리키는 대상의 자료형과 관계없이 모든 포인터의 크기가 같다는 사실입니다. int*, float*, char*, double* 등 어떤 타입의 포인터든 같은 아키텍처에서는 동일한 크기를 가집니다. 그 이유는 포인터가 실제 데이터를 저장하는 것이 아니라 메모리 주소를 저장하기 때문입니다.
sizeof 연산자로 직접 확인하기
실제 개발 환경에서 포인터 크기를 확인하려면 sizeof 연산자를 사용하는 것이 가장 확실합니다.
#include <stdio.h>
int main(void) {
printf("int* 크기: %zu 바이트\n", sizeof(int*));
printf("float* 크기: %zu 바이트\n", sizeof(float*));
printf("char* 크기: %zu 바이트\n", sizeof(char*));
return 0;
}64비트 시스템에서 위 코드를 실행하면 세 값 모두 8이 출력되고, 32비트 시스템에서는 4가 출력됩니다.
핵심 정리
- 포인터 크기는 운영체제와 CPU 아키텍처에 따라 결정됩니다.
- 32비트 시스템에서는 주로 4바이트, 64비트 시스템에서는 주로 8바이트입니다.
- 포인터 크기는 가리키는 자료형(
int*,float*등)과 무관하며, 같은 아키텍처에서는 모두 동일합니다. - 정확한 크기가 필요하다면
sizeof연산자로 직접 확인하는 것이 안전합니다.