포인터의 크기는 얼마입니까?
포인터의 크기가 가리키는 유형과 크기가 같습니까? 아니면 포인터의 크기가 항상 고정되어 있습니까? 예를 들면 ...
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
'UFO ET IT' 카테고리의 다른 글
If (Array.Length == 0) (0) | 2021.01.09 |
---|---|
수신 전화에서 음악 중지 및 시작 (0) | 2021.01.09 |
자바에서 호출자 클래스를 얻는 방법 (0) | 2021.01.09 |
파이썬의 문자열에서 ANSI 이스케이프 시퀀스를 제거하는 방법 (0) | 2021.01.09 |
`is` 키워드는 타이프 스크립트에서 무엇을합니까? (0) | 2021.01.08 |