단어 크기는 포인터 크기와 어떻게 동일합니까?

단어 크기는 포인터 크기와 어떻게 동일합니까?

포인터는 메모리 주소를 저장하므로 그 크기는 메모리 위치에 따라 달라지는 메모리 주소의 크기입니다. 반면, 워드 크기는 명령이 작동할 수 있는 가장 큰 단위입니다. 따라서 메모리 위치의 크기는 한 번에 여러 개의 항목을 수집할 수 있으므로 관련이 없습니다. 그렇다면 단어 크기와 포인터 크기 사이의 관계는 무엇입니까?

답변1

그들은 동일할 필요가 없으며, 그렇지 않은 컴퓨터 시스템의 수는 있는 시스템보다 훨씬 많습니다. 그러나 포인터 크기와 "단어" 크기 사이에는 몇 가지 관계가 있습니다.

프로그램은 많은 포인터 연산을 수행합니다. 배열 첨자는 포인터 추가입니다. 포인터는 서로 비교됩니다. CPU가 포인터 크기에 대해 산술 연산을 수행할 수 없는 경우 주소는 여러 변수로 분할되어야 하며 이로 인해 세그먼트화되거나 뱅크화된 주소 공간이 생성됩니다. 이는 관리가 복잡하고 포인터와 유사한 유형(근거리 포인터, 원거리 포인터, 기반 포인터)의 확산을 유발합니다. 결과적으로 연결된 목록이 배열보다 더 많은 항목을 보유할 수 있는 등 이상한 제한 사항이 추가로 발생합니다.

그럼에도 불구하고 8비트 데이터 버스와 더 큰 주소 공간(아마도 데이터가 아닌 코드에만 해당)을 갖춘 마이크로 컨트롤러가 일반적입니다. 이와는 반대로 32비트 또는 64비트 포인터가 있는 최신 범용 CPU는 포인터보다 훨씬 더 넓은 데이터 단어를 갖습니다(예: 최신 x86_64 CPU의 AVX 하위 시스템에 있는 512비트 데이터 단어). 많은 잠금 없는 알고리즘은 최소 포인터 크기의 두 배인 데이터에 대한 원자적 액세스에 의존합니다.

답변2

TLDR: 아마도 우연일 겁니다.

포인터는 본질적으로 컴퓨터 아키텍처의 일부가 아니며 프로그래밍 언어 기능입니다. 예를 들어 Windows API는 자체 포인터 유형과 크기를 정의합니다. Windows의 C에서 char( char*)에 대한 포인터는 버전에 따라 32비트에서 64비트까지 다양합니다. 단어의 크기는 그것과 거의 관련이 없을 수 있습니다.

단어매우 과부하된 단어입니다. 에헴, 용어입니다. CPU 아키텍처에서 단어는 명령어, 데이터 버스, 메모리 버스 등의 크기를 나타낼 수 있습니다.윈도우 API단어는 부호 없는 짧은 단어입니다. 즉적어도2바이트이므로 short가 구현되는 방식에 따라 달라집니다.

MS 단어와 명령어 크기 단어 사이에는 상관관계가 있을 수 있지만 이에 대해 논의하려면 OS 개발자가 필요하다고 생각하며 이것이 포인터 크기에 영향을 미칠지는 의심스럽습니다.

답변3

한때 컴퓨터 레지스터와 내부 버스는 4비트에서 8비트, 16비트, 32비트, 현재는 64비트로 변경되었습니다. 최대 주소 공간은 포인터의 크기에 따라 다릅니다(Z80A와 같은 일부 초기 CPU에서는페이지포인터 크기의 청크로 구성된 메모리).

버스가 넓어질수록 RAM을 늘리는 것도 바람직했기 때문에 포인터의 크기도 커졌습니다. 때로는 OS가 더 큰 버스를 따라잡지 못하는 경우도 있었습니다.Windows 7 32비트에서 64비트로 전환하면서 최대 주소 지정 가능 RAM은 처음에 4GB에서 8GB로 이동했고 최종적으로 고급 버전에서는 192GB로 이동했습니다.

따라서 레지스터와 버스의 크기(니블에서 바이트, 워드, MS 16비트 OS의 DWORD, usw.)가 주소 공간과 마찬가지로 임의로 증가했습니다.@DarkDust에서 더 완전한 설명을 볼 수 있습니다.

관련 정보