UFO ET IT

포인터의 크기는 얼마입니까?

ufoet 2021. 1. 9. 10:37
반응형

포인터의 크기는 얼마입니까?


포인터의 크기가 가리키는 유형과 크기가 같습니까? 아니면 포인터의 크기가 항상 고정되어 있습니까? 예를 들면 ...

int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;

std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

이것의 결과는 무엇입니까? 겠습니까 sizeof(xPtr)4를 반환하고 sizeof(yPtr)1을 반환하거나,이 포인터는 실제로 같은 크기를 반환? 내가 이것을 묻는 이유는 포인터가 각각의 저장된 주소의 값이 아니라 메모리 주소를 저장하기 때문입니다.


포인터는 일반적으로 고정 된 크기입니다. 32 비트 실행 파일에서는 일반적으로 32 비트입니다. 32 비트 포인터와 16 비트를 구분해야 할 때 오래된 16 비트 창과 같은 몇 가지 예외가 있습니다. 일반적으로 최신 데스크톱 OS의 특정 실행 파일 내에서 균일 할 것이라고 가정하는 것이 매우 안전합니다. .

편집 : 그렇더라도 코드에서 이러한 가정 하지 않도록 강력히주의 할 것 입니다. 특정 크기의 포인터가 반드시 있어야하는 것을 작성하려면 확인하는 것이 좋습니다!

함수 포인터는 다른 이야기 입니다. 자세한 내용은 Jens의 답변 을 참조하십시오.


함수 포인터는 컴파일러에 따라 X86 시스템에서 4 ~ 20 바이트의 매우 다른 크기를 가질 수 있습니다 . 따라서 대답은 아니오입니다. 크기는 다를 수 있습니다.

또 다른 예 : 8051 프로그램을 사용하면 3 개의 메모리 범위가 있으므로 대상의 크기가 항상 동일하더라도 (예 : char) 대상이있는 위치에 따라 8 비트, 16 비트, 24 비트의 세 가지 다른 포인터 크기가 있습니다. .


32 비트 컴퓨터에서 포인터의 크기는 32 비트 (4 바이트)이고 64 비트 컴퓨터에서는 8 바이트입니다. 가리키는 데이터 유형에 관계없이 크기는 고정되어 있습니다.


다른 질문에 답하십시오. 포인터의 크기와 포인터가 가리키는 크기는 관련이 없습니다. 좋은 비유는 우편 주소처럼 간주하는 것입니다. 집 주소의 크기는 집의 크기와 관계가 없습니다.


포인터는 동일한 아키텍처에서 항상 동일한 크기가 아닙니다.

포인터 크기가 다른 경우의 예처럼 "근접", "멀리"및 "거대한"포인터의 개념에 대해 자세히 읽을 수 있습니다.

http://en.wikipedia.org/wiki/Intel_Memory_Model#Pointer_sizes


단어 주소 지정이 가능한 컴퓨터 (예 : Cray PVP 시스템)에서는 다를 수 있습니다.

오늘날 대부분의 컴퓨터는 바이트 주소 지정이 가능한 시스템이며 각 주소는 메모리의 바이트를 나타냅니다. 거기에서 모든 데이터 포인터는 일반적으로 동일한 크기, 즉 컴퓨터 주소의 크기입니다.

단어 지정 가능 시스템에서 각 시스템 주소는 대신 1 바이트보다 큰 단어를 참조합니다. 이들에서 메모리 바이트에 대한 (char *) 또는 (void *) 포인터는 추가 된 단어 내에서 단어 주소와 바이트 오프셋을 모두 포함해야합니다.

http://docs.cray.com/books/004-2179-001/html-004-2179-001/rvc5mrwh.html


포인터의 크기는 시스템이 고유 한 메모리 주소를 보유하는 데 필요한 크기입니다 (포인터는 가리키는 주소 만 보유하므로).

참조 URL : https://stackoverflow.com/questions/6751749/what-is-the-size-of-a-pointer

반응형