source

c: 공극 크기*

ittop 2023. 9. 24. 13:05
반응형

c: 공극 크기*

C의 void* 포인터가 좀 헷갈리네요.특히 이 질문을 읽은 후에:(일부 포인터)의 크기는 항상 4와 같습니까? 한 사람은 (int *)의 크기 == (double *)의 크기가 보장되지 않는다고 말합니다.

제 질문은: (void*) > = (다른 포인터 유형)의 크기 보장이 있습니까?다시 말해, 항상 some_type* 포인터를 void* 포인터에 할당한 다음 some_type*로 반환할 수 있습니까?

데이터 포인터만.void *는 임의의 데이터 포인터는 보유할 수 있지만 함수 포인터는 보유할 수 없습니다.

여기 C FAQ가 있습니다.

void *'s는 개체(즉, 데이터) 포인터만 보유할 수 있으며 함수 포인터를 void * 형식으로 변환하는 것은 휴대용이 아닙니다. (일부 컴퓨터에서는 함수 주소가 어떤 데이터 포인터보다 더 클 수 있습니다.)

첫 번째 부분의 경우, 예, 다른 유형에 다른 크기의 포인터가 있을 수 있습니다.

포인터에 저장된 값은 메모리 주소입니다.32비트 시스템의 경우 메모리에 입력하는 포인터의 길이는 32비트(또는 4바이트)가 됩니다.64비트 시스템의 경우 메모리에 입력하는 포인터의 길이는 64비트(또는 8바이트)가 됩니다.

메모리에서 위치를 유지하는 데이터의 크기는 메모리에서 해당 위치에 표시되는 데이터의 크기와는 무관합니다.

어떻게?char *와는 다릅니다double *,그char *모든 위치를 가리킬 수 있지만,double *8바이트 경계를 따라 무언가를 가리켜야 합니다.사용 중인 프로세서의 규칙에 따라 더 큰 데이터를 정렬해야 합니다.따라서 작은 데이터에 대한 포인터는 일반적으로 큰 데이터에 대한 포인터와 호환되지 않습니다(예를 들어 a를 가리키면 안됨).double *A를 가리키다char *address); 하지만 당신은 다른 방향으로 가는 것을 저장하고 있습니다(예를 들어 당신은 a를 가리킬 수 있습니다).char *A를 가리키다double *주소).

언급URL : https://stackoverflow.com/questions/6908686/c-size-of-void

반응형