302호 컴퓨터실/C++
[C++] 포인터의 크기는 타입과 관계없이 모두 같다.
삼층거주자
2024. 11. 27. 11:50
728x90
반응형
포인터 크기의 원리
- 포인터가 저장하는 것은 메모리 주소
- 포인터는 메모리 주소를 저장하는 변수입니다.
- 메모리 주소의 크기는 운영체제의 주소 공간 크기에 따라 달라집니다.
- 예를 들어, 64비트 운영체제에서는 메모리 주소가 64비트(8바이트) 크기입니다.
- 포인터의 크기는 데이터 타입과 무관
- 포인터는 가리키는 데이터의 타입(예: int, double, char)에 관계없이 메모리 주소를 저장하므로, 모든 포인터의 크기가 동일합니다.
- 64비트 운영체제에서 포인터 크기
- 64비트 운영체제는 64비트 주소 공간을 가지므로, 포인터 크기는 8바이트입니다.
- 32비트 운영체제에서는 포인터 크기가 4바이트였습니다.
int* p_int;
double* p_double;
char* p_char;
// 모두 같은 크기를 가짐
std::cout << sizeof(p_int) << std::endl; // 8 (64비트 시스템)
std::cout << sizeof(p_double) << std::endl; // 8
std::cout << sizeof(p_char) << std::endl; // 8
포인터가 가리키는 타입의 크기는 다르다
포인터의 크기는 동일하지만, 포인터가 가리키는 타입의 크기는 다릅니다.
int number = 10;
double fractional_number = 3.14;
int* p_int = &number;
double* p_double = &fractional_number;
std::cout << "sizeof(*p_int): " << sizeof(*p_int) << std::endl; // 4 (int의 크기)
std::cout << "sizeof(*p_double): " << sizeof(*p_double) << std::endl; // 8 (double의 크기)
- sizeof(*p_int)는 포인터가 가리키는 값의 타입(int)의 크기를 반환합니다.
- sizeof(*p_double)는 포인터가 가리키는 값의 타입(double)의 크기를 반환합니다.
운영체제와 포인터 크기의 관계
- 64비트 운영체제
- 메모리 주소는 64비트, 포인터의 크기는 8바이트입니다.
- 32비트 운영체제
- 메모리 주소는 32비트, 포인터의 크기는 4바이트입니다.
- 16비트 운영체제
- 과거 16비트 시스템에서는 포인터 크기가 2바이트였습니다.
포인터의 크기는 가리키는 데이터의 타입과 관계없이 동일합니다.
반응형